2009-10-15 4 views
2

Создана онлайн-форма в JSP с использованием библиотек тегов SpringMVC. Контроллер для моей формы - веб-сервис RESTful.Ошибка при отправке формы с использованием SpringMVC и REST

RESTful веб-сервис имеет два вызова:

(1) http://localhost:8080/myapp/applications/new

Это воспитывает онлайн-форму в браузере (это работает).

(2) http://localhost:8080/myapp/applications/create

Это сохраняет данные формы в базу данных (ручки представить). Здесь он ломается.

Далее следуют соглашения из примера демонстрационного экспериментального приложения, которое поставляется с Spring Framework.

Интернет Форма:

<%@ page contentType="text/html;charset=UTF-8" language="java"%> 
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> 
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> 

<html> 
    <body> 
     <form:form modelAttribute="application" method="POST" action="create"> 
     <table> 
     <tr> 
      <td>Name:</td> 
      <td><form:input path="name" size="30" maxlength="80"/></td> 
     </tr> 
     <tr> 
      <td>Description:</td> 
      <td><form:input path="description" size="30" maxlength="80"/></td> 
     </tr> 
     <tr> 
      <td>Image URL:</td> 
      <td><form:input path="imgUrl" size="30" maxlength="80"/></td> 
     </tr> 
     </table> 
     <input type="submit" value="Save" /> 
     </form:form> 
    </body> 
</html> 

RESTful веб-сервиса, который служит в качестве формы управления:

@Controller 
@Path(ApplicationsResource.APPLICATION_URL) 
public class ApplicationsResource 
{ 
    private final Logger log = 
      LoggerFactory.getLogger(ApplicationsResource.class); 

    public static final String APPLICATION_URL = "/applications"; 

    @Autowired 
    private ApplicationManager applicationManager; 

    @Autowired 
    private ProfileManager profileManager; 

    @POST 
    @Path("create") 
    @Produces(MediaType.TEXT_HTML) 
    public Model getNewApplication(@Context HttpServletRequest request, 
            @RequestAttribute Model model) 
    { 

     Application app = new Application(); 
     model.addAttribute("application", app); 
     try 
     { 
      if ("POST".equalsIgnoreCase(request.getMethod())) 
      { 
       if (app != null) 
       { 
        applicationManager.save(app); 
        log.info("Added application: " + app.getName()); 
       } 
       else 
       { 
        log.info("Application not added"); 
       } 
      } 
     } 
     catch (Exception e) 
     { 
      log.info("Exception: ", e); 
      throw new 
        WebApplicationException(Response.status(
        RestError.SERVER_ERROR_HTTP_RESP). 
        type("application/json;charset=utf-8"). 
        entity(new ErrorOutput(RestError.SERVER_ERROR_CODE, RestError.SERVER_ERROR_MSG, e.toString())).build()); 
      } 
     return model; 
    } 

    @InitBinder 
    public void setAllowedFields(WebDataBinder dataBinder) 
    { 
     dataBinder.setDisallowedFields(new String[] {"id"}); 
    } 

    @GET 
    @Path("new") 
    @Produces({ MediaType.TEXT_HTML }) 
    public ModelAndView getNewApplicationForm() 
    { 
     log.info("ApplicationsResource - Inside getNewApplicationForm"); 
     ModelAndView mv = new ModelAndView("/applications/applications_new"); 
     mv.addObject("application", new Application()); 
     return mv; 
    } 
} 

Исключение генерируется, когда я нажимаю на представить:

Ошибка выполнения POST/приложения/создать org.jboss.resteasy.spi.BadRequestException:

Не удалось найти сообщение читателя тела для типа:

интерфейс org.springframework.ui.Model типа контента: применение/х-WWW-форм-urlencoded в

орг. jboss.resteasy.core.MessageBodyParameterInjector $ 1 createReaderNotFound (MessageBodyParameterInjector.java:73)

кто-нибудь знает, почему я получаю эту exceptio п?

действительно бы признателен, если кто-то может мне помочь с этим вопросом ...

Happy программирования и спасибо за то, что нашли время, чтобы прочитать это.

ответ

3

Это была проблема RESTEasy ... Исправление помещало приложение приложения @Form в список параметров и добавляло настройки объекта объекта модели домена с помощью @FormParam («name»).

См: Integrating RESTEasy with SpringMVC

0

Вы не сказали своему контроллеру, какие типы мимов он принимает и как их сопоставлять, ему нужен Reader, связанный с этим типом mime, чтобы отобразить его и отправить в свой метод.

+0

Это была проблема Resteasy ... Исправление помещал @Form Application приложение в списке параметров и предваряя сеттеров в области моделирования объекта с @FormParam («имя»). –

Смежные вопросы