Ancuta
Ancuta

Reputation: 181

Limitation of path in Spring

I came across an interesting question while working with Spring and REST API and that problem is: Is the path limited to a certain number of characters in Spring?

The code is as follows

@RequestMapping(value = {REST_PREFIX + "/{key}"}, method = {RequestMethod.GET})
public DashboardItem getExceptionByKey(@PathVariable("key") String key, HttpServletRequest request, HttpServletResponse httpResponse_p) {
    log.info("URL is {}", request.getRequestURL());
    log.info("Key is {}", key);
    return InspectionUtils.getExceptionByKey(key);
}

An example of a key is

67E4D2C089CBCCA2A9732F6986124C6B10.243.2.107#0EEE5EAB06ED4FFF82A8934F7058860C#79A2F0C170A028A3B0410F0F16303F41

When sending the request I made sure to encode the URL and in my program the URL I am receiving is the following

/rest/exceptions/67E4D2C089CBCCA2A9732F6986124C6B10.243.2.107#0EEE5EAB06ED4FFF82A8934F7058860C#79A2F0C170A028A3B0410F0F16303F41

Thus I am receiving the hole key, but when it parses it, the variable key is only

67E4D2C089CBCCA2A9732F6986124C6B10.243.2

I thought that it may be special characters, but it doesn't look like it. My second guess is that there is a limitation for the length of the path.

So my question to you is if there is a limitation regarding the path or is there another problem?

Thank you

Upvotes: 5

Views: 4895

Answers (3)

john16384
john16384

Reputation: 8044

The # character has a special meaning in a URL. It is a fragment identifier, and it is used to jump to a certain part of a page (instead of landing at the top). To avoid this, encode the character as %23.

Upvotes: 0

rob
rob

Reputation: 212

This is some kind of spring convention that treats everything after the last dot as a file extension and cuts it off. You could simply try adding a trailing / in your request mapping and the request. I.e. REST_PREFIX + "/{key}/"

For a more complicated but better solution if you are not the one calling your API see this question

Upvotes: 5

Jeet Prakash
Jeet Prakash

Reputation: 643

It must be the hash # character in your key which is not getting URL encoded. And since anything that comes after # in the URL represents different fragments of the HTML page, it never gets sent to the server.

On using javascript's encodeURIComponent() on your key i got:

67E4D2C089CBCCA2A9732F6986124C6B10.243.2.107%230EEE5EAB06ED4FFF82A8934F7058860C%2379A2F0C170A028A3B0410F0F16303F41

Notice the # character is now encoded. Try this, but you might need to decode it on your server.

Upvotes: 0

Related Questions