当前位置: 首页 > 知识库问答 >
问题:

内容类型'应用程序/x-ww-form-urlencoded; charset=UTF-8'不支持@quiestBody MultiValueMap

屈翰飞
2023-03-14

基于用Spring@Controller编码的x-www-form-Url问题的答案

我写了下面的@Controller方法

@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");
            }
    }

以下错误导致请求失败

{
  "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"
}

[附言:泽西岛要友好得多,但考虑到这里的实际限制,现在不能使用它]

共有3个答案

萧永望
2023-03-14

在请求中添加一个标题,将内容类型设置为application/json

curl -H 'Content-Type: application/json' -s -XPOST http://your.domain.com/ -d YOUR_JSON_BODY

这样,Spring知道如何解析内容。

吕新
2023-03-14

现在您似乎可以用@RequestParam标记方法参数,它将为您完成这项工作。

@PostMapping( "some/request/path" )
public void someControllerMethod( @RequestParam Map<String, String> body ) {
  //work with Map
}
郎羽
2023-03-14

问题是,当我们使用application/x-www-form-urlencoded时,Spring并不将其理解为RequestBody。因此,如果我们想使用它,我们必须删除@RequestBody注释。

然后尝试以下操作:

@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;
}

请注意,删除了注释@刚体

答案:http发布请求与内容类型应用程序/x-www-form-urlencoded不工作在Spring

 类似资料: