我有一个控制器方法,如下所示:

@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

10-06 09:40