我有一个控制器方法,如下所示:
@PostMapping("/view/{location}")
public ModelAndView view(@PathVariable("location") String location) {
ModelAndView modelAndView = new ModelAndView();
return modelAndView;
}
这种方法能够接收类似
“ / view / a”或“ / view / b”,以便pathVariable位置变为a或b。
但是我希望这种相同的方法可以接收到所有在其开头都带有/ view的请求,以便pathVariable“位置”保留其余数据。
例如
对于/ view / a / b / c的请求,pathVariable位置将变为a / b / c。
就像文件系统层次结构一样。
请让我知道Spring MVC中是否可以实现这种功能,我对此很陌生。
最佳答案
看看这个article
想法是通过添加/view
将以**
开头的所有路径映射到单个控制器方法,但是您必须使用HttpServletRequest
而不是@PathVariable
。
因此,在您的情况下,将是这样的:
@PostMapping("/view/**")
public ModelAndView view(HttpServletRequest request) {
String pathVariable = extractId(request);
ModelAndView modelAndView = new ModelAndView();
return modelAndView;
}
private String extractId(HttpServletRequest request) {
String path = (String) request.getAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE);
String bestMatchPattern = (String) request.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE);
return new AntPathMatcher().extractPathWithinPattern(bestMatchPattern, path);
}
另外,请检查此question