@PathVariable с косыми чертами в середине URL-адреса RequestMapping - PullRequest
1 голос
/ 21 октября 2019

У меня есть сопоставление контроллера Spring следующим образом:

@RequestMapping(value = "api/{pathVar1}/receipt", method = RequestMethod.POST)
@ResponseBody
public String generateReceipt(HttpServletRequest request, @PathVariable String pathVar1) {
....
}

В этом случае, что если pathVar1 имеет косую черту ('/'). Пример запроса:

'api / CODE / 1 / receive'

pathVar1 поставляется с

'CODE / 1'

.

1 Ответ

0 голосов
/ 21 октября 2019

Я думаю, это не самое чистое решение, но, похоже, оно работает:

Замените @PathVariable в пути API на **, чтобы принять что-нибудь между "api /" и "/ receive", изатем извлеките нужную часть пути.

@RequestMapping(value = "api/**/receipt", method = RequestMethod.POST)
@ResponseBody
public String generateReceipt(HttpServletRequest request) {
    String path = (String) request.getAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE);
    String bestMatchPattern = (String) request.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE);
    String apiPath = new AntPathMatcher().extractPathWithinPattern(bestMatchPattern, path);
    String neededPathVariableValue = apiPath.substring(0, apiPath.length() - "/receipt".length());

    //...
}
...