【问题标题】:Regexp in PathVariable does not work correctly SpringPathVariable 中的正则表达式无法正常工作 Spring
【发布时间】:2019-06-19 06:41:50
【问题描述】:

有一个控制器。

我提出请求http://localhost:8080/api/v1/download/avatar/1/GtAHWk3EVjBcltY.JPG - 我得到404。达不到方法。为什么?常规赛出了什么问题?

我使用的是 Spring Boot 2。但问题是有一个项目,没有启动并且有相同的映射 - 一切都很好。

@Controller
@RequestMapping("/api/v1/download")
public class DownloadRestController {

    private final DownloadService downloadService;

    @Autowired
    public DownloadRestController(DownloadService downloadService) {
        this.downloadService = downloadService;
    }

    @RequestMapping(value = "/avatar/{path:.*}")
    public void download(HttpServletRequest request, @PathVariable String path) {
        this.downloadService.download(request, "/avatar/"+path);
    }

}

【问题讨论】:

  • 你为什么要这样做?你不能只有一个普通的字符串吗?
  • @Pijotrek 没有。 /avatar/ 之后的数据是动态的。
  • 是的,所以? /avatar/{path}@PathVariable("path") String path 应该可以工作。不需要.* 的东西。请尝试一下。
  • @Pijotrek 不工作 - 404。
  • http://localhost:8080/api/v1/download/avatar/1/GtAHWk3EVjBcltY.JPG - 看,有 2 个路径变量 /1/GtAHWk3EVjBcltY.JPG 因此你的错误

标签: spring spring-boot spring-mvc path-variables


【解决方案1】:

你在打电话

http://localhost:8080/api/v1/download/avatar/1/GtAHWk3EVjBcltY.JPG

并且您的方法接受http://localhost:8080/api/v1/download/avatar/{path}

所以你传递了两个@PathVariables - 这就是你得到HTTP-404的原因。 你必须决定是否需要

@PathVariable("id") long id, @PathVariable("path") String path

有 2 个路径变量 或

@PathVariable("path") String path 

只有一个。

此外,除此之外,您不需要添加一些类似正则表达式的东西。

@PathVariable("path") String path 

在你的论点中应该运作良好。

【讨论】:

  • 我不需要解析每个参数。我想对所有文件提出通用请求。在其他项目中,没有 Spring Boot,这可以完美地工作。但这里是 - 404。但代码相同。
  • 当您使用两个路径变量调用并且只接受一个时,它将永远是 404。
  • 很好。但是为什么这个 /avatar/{path:.*} 在 spring 5 的其他项目中工作?
  • 我不知道。但是我很确定,如果您应用我的更改,它将对您有用。只需添加 @PathVariable("id") long id/avatar/{id}/{path}
  • @Tsyklop 你试过了吗?有帮助吗?
猜你喜欢
  • 1970-01-01
  • 2012-05-25
  • 2016-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多