ege*_*ari 19 rest spring http spring-mvc http-put
我有一个控制器动作,我认为应该是一个HTTP PUT,但是当我尝试在控制器动作中使用@RequestParam时,Spring正在抱怨.HTTP PUT方法不允许使用请求参数,这就是Spring拒绝它的原因吗?
@RequestMapping(value = "/{helpDocumentId}/vote", method = RequestMethod.PUT)
public void voteHelpfulness(@PathVariable long helpDocumentId, @RequestParam boolean isHelpful) {
helpManager.voteOnHelpDocument(helpDocumentId, isHelpful);
}
Run Code Online (Sandbox Code Playgroud)
执行时,它会抛出此错误:
org.springframework.web.bind.MissingServletRequestParameterException: Required boolean parameter 'isHelpful' is not present
Run Code Online (Sandbox Code Playgroud)
当然,isHelpful参数IS存在.我可以使上面的代码完美地用于HTTP POST,所以我知道这不是问题.
$.ajax({
url: "/help/" + helpDocumentId + "/vote.json",
type: "PUT",
data: {
isHelpful: isHelpful
},
success: function(response) {
// ....
}
});
Run Code Online (Sandbox Code Playgroud)
PUT是正确的http方法吗?此操作会修改helpDocument,但不会创建一个.
Arj*_*jan 15
从 Spring 3.1开始,HttpPutFormContentFilter可用于处理application/x-www-form-urlencoded数据:
ServletRequest.getParameter*()在HTTP PUT请求期间通过方法系列使表单编码数据可用的过滤器.Servlet规范要求表单数据可用于HTTP POST,但不能用于HTTP PUT请求.此过滤器拦截内容类型为的HTTP PUT请求,
'application/x-www-form-urlencoded'从请求正文中读取编码内容,并包装ServletRequest,以使表单数据可用作请求参数,就像HTTP POST请求一样.
对于其他传入数据,例如JSON,您需要@RequestBody按照JQuery,Spring MVC @RequestBody和JSON中的说明进行操作 - 使其协同工作,不会遇到415不支持的媒体类型.
小智 6
Spring控制器支持GET/HEAD/POST/PUT/DELETE/OPTIONS/TRACE,但由于您的浏览器可能无法发送这些请求方法,因此它不适合您.
解决方法是使用Spring提供的"org.springframework.web.filter.HiddenHttpMethodFilter".它要求您为请求方法传递隐藏参数.此过滤器支持的默认参数是"_method".
检查过滤器的javadoc以获取更多信息.
| 归档时间: |
|
| 查看次数: |
18874 次 |
| 最近记录: |