Java Spring MVC和@RequestParam,带有x-www-form-urlencoded

Java Spring MVC和@RequestParam,带有x-www-form-urlencoded,java,spring,rest,spring-mvc,spring-boot,Java,Spring,Rest,Spring Mvc,Spring Boot,我正在尝试构建一个API,它接受一个POST,其正文中的一个参数应该是x-www-form-urlencoded。我目前已将其映射为: @RequestMapping(method = POST, consumes = APPLICATION_FORM_URLENCODED_VALUE, produces = APPLICATION_JSON_VALUE) public ResponseEntity<LinkEntity> createShortLink(@RequestBo

我正在尝试构建一个API,它接受一个POST,其正文中的一个参数应该是x-www-form-urlencoded。我目前已将其映射为:

 @RequestMapping(method = POST,  consumes = APPLICATION_FORM_URLENCODED_VALUE, produces = APPLICATION_JSON_VALUE)
  public ResponseEntity<LinkEntity> createShortLink(@RequestBody String url) {
    LinkEntity savedLink = linkService.create(url);
 }
@RequestMapping(方法=POST,消费=APPLICATION\u FORM\u URLENCODED\u值,生产=APPLICATION\u JSON\u值)
public ResponseEntity createShortLink(@RequestBody字符串url){
LinkEntity savedLink=linkService.create(url);
}
当我用Postman(restcrome扩展名)和一个表单参数url=发布一篇文章时,它以url=http%3A%2F%2Fwww.drissamri的形式出现在这个方法中

当我尝试将@Requestbody更改为@RequestParam(value=“url”)时,仍然会得到url=前缀的url(如预期的那样),但它不再是url编码的。为什么不再进行编码?这是一个错误,还是有其他方法可以将参数作为urlencoded value

接收,因为参数正确提到的值已被检索并已解码。如果需要访问原始参数,可以通过其他方式访问该参数


一种方法是注入一个HttpServletRequest并使用它不解码值。

你的意思是
@RequestParam(“uri”)
?是的,确实,我编辑了这篇文章。
@RequestBody
按原样映射请求体,
@RequestParam
从中取出值。后者是来自查询字符串的值,如果是
x-www-form-urlencoded
POST,则也是来自主体的参数,当然这两个参数都已解码。