SuhasD SuhasD - 1 year ago 98
Java Question

Handling special characters in REST API

I am having following URL


which gets converted like


Where as my controller mapping is:

@RequestMapping(value = "/info/{id}", method = RequestMethod.GET)

here 'id' contains forward slash (/). So when I hit the URL I get 400 Bad Request.

I know the possible solutions

  • Setting tomcat to allow forward slash.

  • Use URL encoding.

  • Use of
    instead of

But above solution are not possible for me.

Q. Is there any other solution like (using regular expression or changing the mapping or anything else) to the problem ?
Also how the tomcat treats other special characters ('.' , ''' , ':' , ',') correctly and controller gets hit but not for '/'.

Tried but not working :

1) @RequestMapping(value = "/info/{id:.*}", method = RequestMethod.GET)
2) @RequestMapping(value = "/info/{id}/**", method = RequestMethod.GET)
3) @RequestMapping(value = "/info/**", method = RequestMethod.GET)

dit dit
Answer Source

It is not nice, but you can use Base64 transformation.

So you client will send an encoded id and you decode it back in your controller.

import org.apache.commons.codec.binary.Base64;

@RequestMapping(value = "/info/{id}", method = RequestMethod.GET)
public String get(@PathVariable String id) {
    final String realId = new String(new Base64(true).encode(id));

EDIT: You should use url save implementation of Base64:

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download