Data binding 如何在Spring中配置端点以同时接受表单数据和XML请求体?

Data binding 如何在Spring中配置端点以同时接受表单数据和XML请求体?,data-binding,spring-mvc,Data Binding,Spring Mvc,关于Spring的MVC数据绑定功能,我有一个小问题。 我有以下控制器类: @Controller @RequestMapping("/foo") public class FooController() { // … some init stuff // @RequestMapping(value = "/{id}/edit.{format}", method = RequestMethod.POST) public ModelAndView editFoo(@Reque

关于Spring的MVC数据绑定功能,我有一个小问题。 我有以下控制器类:


@Controller
@RequestMapping("/foo")
public class FooController() {

    // … some init stuff //

@RequestMapping(value = "/{id}/edit.{format}", method = RequestMethod.POST)
    public ModelAndView editFoo(@RequestBody FooItem foo, @PathVariable("format") String format) {

        // some code here to edit the FooItem //
    }
}
我希望能够针对此方法发布表单数据和XML。为此,我在我的
applicationContext.xml
中添加了两个消息转换器:默认的
formHttpMessageConverter
和一个XStream封送器

这很好,但我有一个问题,如果我使用
@RequestBody
并针对URL发布表单数据,服务器将响应415错误。如果我删除这个注释,表单数据工作正常,Spring会为我创建对象,但是如果我针对它发布XML,我会得到一个空对象

有没有办法解决这个问题,或者我需要两种方法才能处理这两种传入格式


提前谢谢

我想你需要两种方法


FormHttpMessageConverter
@ModelAttribute
提供的数据绑定功能不同,它无法将请求绑定到指定的目标类,只能绑定到
多值映射
(请参见)。

如何发布表单数据?您确定请求有
内容类型:application/x-www-form-urlencoded
标题吗?数据是用标准HTML表单发布的,因此内容类型标题显示“application/x-www-form-urlencoded”听起来很合理,因为FormHttpMessageConverter只能返回多值映射(如您所写)。此解决方案确实有效,但是它需要一个额外的端点(
/foo
用于XML,而
/foo/bar
用于表单数据)。我看到了请求结构上的过滤器如何帮助隔离请求和公开单个端点(例如,body或notbody),但我想知道是否有更直接的方法。是的,这是一篇老文章。处理遗留代码~