@PathVariable in SpringBoot with slashes in URL

Kirill Ch :

I have to get params from URL using @PathValiable in SpringBoot application. These params often have slashes. I don't have a control about what a user would enter in URL so I would like to get what he has entered and then I can handle with it.

I have already looked through materials and answers here, I don't think that for me the good solution is to ask users somehow encode the entering params.

The SpringBoot code is simple:

@RequestMapping("/modules/{moduleName}")
@ResponseBody
public String moduleStrings (@PathVariable("moduleName") String moduleName) throws Exception {

  ...

}

So the URL for example would be the following:

http://localhost:3000/modules/...

The issue is that the param moduleName often has slashes. For example,

metadata-api\cb-metadata-services OR
app-customization-service-impl\\modules\\expand-link-schemes\\common\\app-customization-service-api

So a user definetely can enter:

http://localhost:3000/modules/metadata-api\cb-metadata-services

Is this possible to get everything what a user has entered in URL after /modules/?

If anyone tell me what are the good ways to handle such issue.

P.J.Meisch :

This code gets the complete path:

@RequestMapping(value = "/modules/{moduleBaseName}/**", method = RequestMethod.GET)
@ResponseBody
public String moduleStrings(@PathVariable String moduleBaseName, HttpServletRequest request) {
    final String path =
            request.getAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE).toString();
    final String bestMatchingPattern =
            request.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE).toString();

    String arguments = new AntPathMatcher().extractPathWithinPattern(bestMatchingPattern, path);

    String moduleName;
    if (null != arguments && !arguments.isEmpty()) {
        moduleName = moduleBaseName + '/' + arguments;
    } else {
        moduleName = moduleBaseName;
    }

    return "module name is: " + moduleName;
}

Guess you like

Origin http://10.200.1.11:23101/article/api/json?id=433655&siteId=1