一尘不染

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

spring-mvc

也许这应该是行不通的,但是至少我想知道为什么会这样。我在PUT体内传递了一个简单的val = somevalue,但spring 400 Bad Request似乎发回了val参数,因为它似乎无法识别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) {...}
       });

有任何想法吗?


阅读 279

收藏
2020-06-01

共1个答案

一尘不染

我目前尚无解决方法,但是这里有一个错误报告,即“无法修复”。我一直在同一个问题

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
}
2020-06-01