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.