0 Replies Latest reply on Oct 15, 2009 10:28 PM by socal_javaguy

    Getting error when submitting form using SpringMVC and REST

      Hello there,

      Created an online form in JSP using SpringMVC tag libraries. The controller for my form is a RESTful web service (JBoss RESTEasy).

      The RESTful web service has two calls:

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

      This brings up the online form in the browser (this works).

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

      This saves the form data to a database (handles submit). This is where it breaks.

      Followed the conventions from the sample demo petclinic app which comes with the Spring Framework.

      Online form:

      <%@ 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>
      


      The RESTful web service which serves as form controller:

      @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;
      
       @POST
       @Path("create")
       @Produces(MediaType.TEXT_HTML)
       @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
       public void getNewApplication(@Context HttpServletRequest request, @ModelAttribute Application app)
       {
       log.info("ApplicationsResource - Inside getNewApplication() method.");
       String contentType = request.getContentType();
       log.info("Content-Type:" + contentType);
      
       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());
       }
       }
      
       @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;
       }
      }
      


      Exception thrown when I click on submit:

      Failed executing POST /applications/create
      
      org.jboss.resteasy.spi.BadRequestException:
      
      Could not find message body reader for type:
      
      class com.myapp.domain.Application
      
      of content type: application/x-www-form-urlencoded
       at org.jboss.resteasy.core.MessageBodyParameterInjector$1.createReaderNotFound(MessageBodyParameterInjector.java:73)
       at org.jboss.resteasy.core.messagebody.ReaderUtility.doRead(ReaderUtility.java:105)
       at org.jboss.resteasy.core.messagebody.ReaderUtility.doRead(ReaderUtility.java:93)
       at org.jboss.resteasy.core.MessageBodyParameterInjector.inject(MessageBodyParameterInjector.java:120)
       at org.jboss.resteasy.core.MethodInjectorImpl.injectArguments(MethodInjectorImpl.java:93)
      


      Does anyone know why I am getting this exception?

      Would really appreciate it if someone could help me with this issue...

      Happy programming and thank you for taking the time to read this.