Spring MVC and @RequestParam with x-www-form-urlencoded

11,510

As correctly mentioned by Pavel Horal the parameter is retrieved by ServletRequest#getParameter and is already decoded. If you need to access the origin parameter you can access the parameter by other means.

One way would be to inject a HttpServletRequest and use HttpServletRequest#getQueryString() which does not decode the values.

Share:
11,510
Driss Amri
Author by

Driss Amri

Updated on June 13, 2022

Comments

  • Driss Amri
    Driss Amri almost 2 years

    I'm trying to build an API that takes a POST with one parameter in the body that should be x-www-form-urlencoded. I've currently mapped it as:

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

    When I do a POST with Postman (REST Chrome extension) with one form parameter url=http://www.drissamri.be it comes into this method as url=http%3A%2F%2Fwww.drissamri.be as expected.

    When I try to change the @Requestbody into @RequestParam(value = "url") I still get the URL with the url= prefix (as expected) but it is not urlencoded anymore. Why doesn't the encoding take place any more? Is this a bug or is there another way to take in the parameter as urlencoded value