-1

我无法解决这个问题(@PathVariable 在@GetMapping、@DeleteMapping URL 中间带有斜线)请帮帮我!

URL ex : aaa/test/111/l2323:sdfsd:23423423/bbb 

- test/111/l2323:sdfsd:23423423 : string variable with slashes
- bbb : another variable

    @GetMapping("aaa/**")
    public @ResponseBody List<Dto> getAAA(HttpServletRequest request) {
        ...
    }

    @DeleteMapping("aaa/**/{bbb}")
    public void deleteTest(HttpServletRequest request,
        @PathVariable("bbb") String bbb) {
        ...
    }

    @GetMapping("aaa/**/{bbb}")
    public Dto getTest(HttpServletRequest request,
        @PathVariable("bbb") String bbb) {
         ...
    }

    private String extractSlashVariable(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);
    }..

我该如何处理这个问题?上面的代码不起作用...请帮助我谢谢!

4

1 回答 1

0

一个有原则的答案是——你不能。URL 存在假设结构 - 每个部分由斜杠分隔。在您的 url 中包含斜杠的“变量”通常是无效的,变量不能跨越 url 的多个级别。如果路径参数可能包含有问题的字符,例如斜杠,则需要对它们进行 url 编码(%2F我相信是 的编码版本/)。

如果您真的想破解它来工作 - 如果您确实将 ant 匹配策略设置为ant_path_matcher(允许匹配路径,如/**/test),就像错误消息所暗示的那样,它可能允许您解析它。您将在两个 GET 之间得到模棱两可的错误,这是不可能的,但只有其中一个和删除 miiiight 工作。为此,只需添加spring.mvc.pathmatch.matching-strategy=ant_path_matcher到您的 application.properties。

于 2022-02-28T09:08:54.070 回答