备忘,遇到在URl中接收类似文件路径的参数 /put/test/dy_only/test.jpg
理想状态 put 作为上传空间,test/dy_only/test.jpg 作为文件名。

Controller 里使用正则正常匹配

@PutMapping(value = "{dir}/**")
public void putFile(HttpServletRequest request, HttpServletResponse response,
                    @PathVariable String dir) {
  String fileName = getExtractPath(request);
}

使用如下方法获取所需要的模式串。

private String getExtractPath(final HttpServletRequest request) {
  //用于获取请求全路径: /demo/put/test/dy_only/test.jpg
  String path = (String) request.getAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE);
  //用户获取匹配到controller的路径:/demo/{dir}/**
  String bestMatchPattern = (String) request.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE);
  //使用 AntPathMatcher 匹配所需要的URL : test/dy_only/test.jpg
  return new AntPathMatcher().extractPathWithinPattern(bestMatchPattern, path);
}

↓ 从request里面取出的两个参数 ↓


request