【问题标题】:How to troubleshoot spring mvc mapping issue?如何解决spring mvc映射问题?
【发布时间】:2012-06-21 17:43:32
【问题描述】:

我有一个简单的Spring程序,后端是带有Restful web service的Spring MVC,前端是纯HTML+ajax。

我的问题是,当我尝试使用以下内容将 HTTP 请求参数映射到 pojo 时,它总是失败:

@RequestMapping(value = "/books", method = RequestMethod.PUT)
    public @ResponseBody
    String updateBook(BookInfo book) 

这里我使用 PUT 方法,因为它是一个修改操作。也不例外,但我没有任何东西注入到 book 对象中。

同样的HTTP请求参数,如果我将方法改为POST,客户端通过POST发送,就成功了:

@RequestMapping(value = "/books", method = RequestMethod.POST)
public ResponseEntity<String> addBook(BookInfo book) 

这本时间簿总是会被填满的。

为什么 PUT 和 POST 有区别?还是返回类型的问题? (一个是 ResponseBody,另一个是 ResponseEntity)?或者,如果您使用 PUT,那么 pojo 必须在持久上下文中?

我应该如何调查这个问题?

【问题讨论】:

    标签: spring mapping pojo


    【解决方案1】:

    我认为这不是您的配置或代码的问题。 在 Spring Framework 中,提供了一个名为 HiddenHttpMethodFilter 的过滤器,它为所有方法提供服务,但最初它将执行 POST 请求,但带有一个隐藏的 _method 表单字段。此过滤器读取此隐藏字段值,然后相应地更改方法值。请参考this link 了解更多信息。我认为使用此过滤器进行配置将解决您的问题。

    希望这对您有所帮助。干杯。

    【讨论】:

    • 嗨,小伙子,感谢您的提示。我会试一试并反馈。
    • 不客气。我很确定这将解决您的问题。但我建议您浏览一下我提供的链接。 :-)
    • 事实证明这是一个真正的映射问题,在客户端,我应该使用 dojo.xhrPut({url:'path/to/resource',putData:data,headers:{... “application/json”},在服务器端,我应该在映射的bean之前添加@requestBody,以确保spring从请求主体映射,而不是url。进行此更改后,PUT方法可以工作。但是,我'我还在研究 dojo.xhrPut({putData:data}) 和 dojo.xhrPut({content:data}) 有什么区别,听起来就是这样
    • 我不知道道场。我从来没有使用过它。但我很确定你的问题已经解决了。 :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-19
    • 2012-09-14
    • 1970-01-01
    • 1970-01-01
    • 2011-12-24
    • 2023-04-02
    • 2022-01-01
    相关资源
    最近更新 更多