我正在尝试构建一个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值
答案 0 :(得分:2)
正如Pavel Horal正确提到的那样,参数由ServletRequest#getParameter检索并且已经被解码。如果需要访问origin参数,可以通过其他方式访问该参数。
一种方法是注入HttpServletRequest并使用HttpServletRequest#getQueryString(),不解码值。