@RequestBody MultiValueMap不支持内容类型'application/x-www-form-urlencoded; charset = UTF-8' [英] Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported for @RequestBody MultiValueMap
本文介绍了@RequestBody MultiValueMap不支持内容类型'application/x-www-form-urlencoded; charset = UTF-8'的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
基于答案 x-www-form-用Spring @Controller urlencode
我写了下面的@Controller方法
I have written the below @Controller method
@RequestMapping(value = "/{email}/authenticate", method = RequestMethod.POST
, produces = {"application/json", "application/xml"}
, consumes = {"application/x-www-form-urlencoded"}
)
public
@ResponseBody
Representation authenticate(@PathVariable("email") String anEmailAddress,
@RequestBody MultiValueMap paramMap)
throws Exception {
if(paramMap == null || paramMap.get("password") == null) {
throw new IllegalArgumentException("Password not provided");
}
}
失败并显示以下错误的请求
the request to which fails with the below error
{
"timestamp": 1447911866786,
"status": 415,
"error": "Unsupported Media Type",
"exception": "org.springframework.web.HttpMediaTypeNotSupportedException",
"message": "Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported",
"path": "/users/usermail%40gmail.com/authenticate"
}
[PS:泽西岛要友好得多,但鉴于这里的实际限制,现在无法使用它]
[PS: Jersey was far more friendly, but couldn't use it now given the practical restrictions here]
推荐答案
问题是,当我们使用 application/x-www-form-urlencoded 时,Spring不会将其理解为RequestBody .所以,如果我们要使用这个 我们必须删除 @RequestBody 注释.
The problem is that when we use application/x-www-form-urlencoded, Spring doesn't understand it as a RequestBody. So, if we want to use this we must remove the @RequestBody annotation.
然后尝试以下操作:
@RequestMapping(value = "/{email}/authenticate", method = RequestMethod.POST,
consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE,
produces = {MediaType.APPLICATION_ATOM_XML_VALUE, MediaType.APPLICATION_JSON_VALUE})
public @ResponseBody Representation authenticate(@PathVariable("email") String anEmailAddress, MultiValueMap paramMap) throws Exception {
if(paramMap == null && paramMap.get("password") == null) {
throw new IllegalArgumentException("Password not provided");
}
return null;
}
请注意,已删除注释 @RequestBody
answer : 查看全文