jquery - 如果使用 PUT,SpringMVC 无法识别请求主体参数

标签 jquery rest spring-mvc

也许这应该行不通,但至少我想明白为什么。我在 PUT 主体中传递了一个简单的 val=somevalue 但 spring 发回了一个 400 Bad Request 因为它似乎无法识别 val 参数。

类似的请求适用于POST。可能是 SpringMVC 没有将 PUT 请求主体识别为参数源吗?

Content=-Type 在这两种情况下都正确设置为 application/x-www-form-urlencoded。

spring拒绝调用的方法是这样的:

@RequestMapping(value = "config/{key}", method = RequestMethod.PUT)
@ResponseBody
public void configUpdateCreate(final Model model, @PathVariable final String key, @RequestParam final String val,
        final HttpServletResponse response) throws IOException
{
    //...
}

为了完整起见,这里是 jquery ajax 调用。我看不出这有什么问题。客户端是Firefox 4或Chrome,两者显示的结果相同。

$.ajax({
         url:url,
         type:'PUT',
         data:'val=' + encodeURIComponent(configValue),
         success: function(data) {...}
       });      

有什么想法吗?

最佳答案

我目前不知道有什么解决办法,但这里的错误报告是“无法修复”。我一直在解决同样的问题

https://jira.springsource.org/browse/SPR-7414

更新:这是我的修复。我正在使用 RequestBody 注释。然后使用MultiValueMap。

http://static.springsource.org/spring/docs/3.0.5.RELEASE/reference/mvc.html#mvc-ann-requestbody

@RequestMapping(value = "/{tc}", method = RequestMethod.PUT) 
public void update(@PathVariable("tc") final String tc, 
@RequestBody MultiValueMap<String,String> body, HttpServletResponse response) {

    String name = body.getFirst("name");
// more code
}

关于jquery - 如果使用 PUT,SpringMVC 无法识别请求主体参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5894270/

相关文章:

java - 如何知道 Retrofit 生成的 Url 是哪个?

java - 使用 REST API 在 Jira 中创建问题

java - 使用 CrudRepository 从 View 获取数据

Ajax 将 "Map"对象传递给 Spring MVC Controller

java - 如何以编程方式配置 TransactionManager

javascript - 在 iframe 中加载网页后设置 textarea val

javascript - 如何在表格中滑动行?

javascript - jquery 动画速度没有改变

javascript - WooCommerce 的动态交付时间计数器作为简码

ruby-on-rails - 请求规范按预期工作; Controller 规范允许 :post when it shouldn't