Spring @RequestMapping handling of special characters

17,907

Solution 1

You are receiving this error because using it as path variable it is decoded and then server tries to match it to a path that doesn't exits. Similar questions where posted a few years ago: How to match a Spring @RequestMapping having a @pathVariable containing "/"?, urlencoded Forward slash is breaking URL.

A good option for you would be to change _id from @PathVariable to @RequestParam and problem solved, and remove it from path.

Solution 2

Hope you can add regex in the path variable like:

@RequestMapping(value = "/services/produce/{_id:.+}", 
  method = RequestMethod.PATCH, 
  consumes = MediaType.APPLICATION_JSON_VALUE, 
  produces = MediaType.APPLICATION_JSON_VALUE)
Share:
17,907
Ammar
Author by

Ammar

A software developer who loves his job...

Updated on June 04, 2022

Comments

  • Ammar
    Ammar almost 2 years

    I have a REST API like this:

      @RequestMapping(value = "/services/produce/{_id}", method = RequestMethod.PATCH, 
      consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
      public String patchObject(@RequestBody PatchObjectRequest obj, 
          @PathVariable("_id") String id) {
      // some code
      }
    

    My problem is that the id that might be given is in the form:

    US%2FCA%2FSF%2FPlastic
    

    Which is a URL encoding of "US/CA/SF/Plastic".

    My problem is that when a % character is put into the URL the @RequestMapping does not map it to this method and it will return a 404. Is there a way to accept ids that have % character in them as part of the URL?