我必须在SpringBoot应用程序中使用@PathValiable从URL获取参数。这些参数通常带有 斜线
。我无法控制用户在URL中输入的内容,因此我想获取他输入的内容,然后我就可以对其进行处理。
我已经在这里浏览过材料和答案,我认为对我而言,好的解决方案不是要求用户以某种方式对输入的参数进行编码。
SpringBoot代码很简单:
@RequestMapping("/modules/{moduleName}")
@ResponseBody
public String moduleStrings (@PathVariable("moduleName") String moduleName) throws Exception {
...
}
因此,URL如下所示:
http://localhost:3000/modules/...
问题在于,参数 moduleName 通常带有斜杠。例如,
metadata-api\cb-metadata-services OR
app-customization-service-impl\\modules\\expand-link-schemes\\common\\app-customization-service-api
因此,用户可以输入:
http://localhost:3000/modules/metadata-api\cb-metadata-services
是否可以获取 / modules / 之后用户在URL中输入的所有内容?
如果有人告诉我什么是解决此类问题的好方法。
此代码获取完整路径:
@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;
}