使用SpringMVC标签库在JSP中创建了一个在线表单。我的表单的控制器是一个RESTful Web服务。使用SpringMVC和REST提交表单时出错
RESTful Web服务有两个电话:
(1)http://localhost:8080/myapp/applications/new
这带来了在浏览器的在线形式(这工作)。
(2)http://localhost:8080/myapp/applications/create
这种形式数据保存到数据库中(手柄提交)。这是它破裂的地方。
遵循Spring Framework附带的示例演示Petclinic应用程序中的约定。
在线形式:
<%@ 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 Web服务:
@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:在
有机 应用程序/ x-WWW窗体-urlencoded。 jboss.resteasy.core.MessageBodyParameterInjector $ 1 createReaderNotFound(MessageBodyParameterInjector.java:73)
有谁知道为什么我得到这个例外? N +
会很感激,如果有人可以帮助我解决这个问题...
快乐编程,并感谢您抽出宝贵的时间来阅读。
这是一个问题的RESTEasy ...的修复程序。把@Form应用程序应用程序的参数列表中,并与@FormParam(“名称”)前面加上域模型对象的setter方法。 – 2009-10-17 21:20:18