使用x-www-form-urlencoded的Spring MVC和@RequestParam

时间:2014-11-21 23:17:02

标签: java spring rest spring-mvc spring-boot

我正在尝试构建一个API,该API在正文中使用一个应该为 x-www-form-urlencoded 的参数进行POST。我目前将其映射为:

 @RequestMapping(method = POST,  consumes = APPLICATION_FORM_URLENCODED_VALUE, produces = APPLICATION_JSON_VALUE)
  public ResponseEntity<LinkEntity> createShortLink(@RequestBody String url) {
    LinkEntity savedLink = linkService.create(url);
 }

当我使用一个表单参数 url = http://www.drissamri.be 对Postman(REST Chrome扩展程序)进行POST时,它会以 url = http%3A%2F%的方式进入此方法2Fwww.drissamri 。如预期的那样。

当我尝试将 @Requestbody 更改为 @RequestParam(值=&#34; url&#34;)时,我仍然会获得带有url =前缀的网址(正如预期的那样)但它不再是urlencoded。为什么编码不再发生?这是一个错误还是有另一种方法将参数作为urlencoded值

1 个答案:

答案 0 :(得分:2)

正如Pavel Horal正确提到的那样,参数由ServletRequest#getParameter检索并且已经被解码。如果需要访问origin参数,可以通过其他方式访问该参数。

一种方法是注入HttpServletRequest并使用HttpServletRequest#getQueryString()解码值。