Я думаю, это не самое чистое решение, но, похоже, оно работает:
Замените @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());
//...
}