Getting error when submitting form using SpringMVC and REST
socal_javaguy Oct 15, 2009 10:28 PMHello 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.