使用正则表达式从 JAX-RS @Path 迁移到 Spring MVC @RequestMapping

Migrate from JAX-RS @Path to Spring MVC @RequestMapping using regex

我正在尝试将代码从 Jax-Rs(球衣实现)迁移到 Spring MVC 入口点:

jax-rs:

@GET
@Path("{bundle}/bundle{min: (-min)*}.{extension: js|css}")
public Response getBundle(@PathParam("bundle") String bundle, @PathParam("min") String min, @PathParam("extension") String extension)

Spring MVC:

@RequestMapping(method = GET, path = "{bundle}/bundle{min:(-min)?}{extension:\.(js|css)?}")
public void getBundle(@PathVariable String bundle, @PathVariable String min, @PathVariable String extension)

根据 Spring MVC documentation,我可以对 @RequestMapping 使用正则表达式。语法类似于 jaxrs,但入口点不起作用(404 未找到)。

入口点的值示例:http://localhost:8080/foo/bundle-min.css

我找到了 @RequestMapping(method = GET, path = "{bundle}/bundle**") 的解决方案,但我必须解析字符串以捕获我需要的参数值。

您的正则表达式似乎没问题,但请将那些 捕获组 替换为 非捕获组 ,如下所示:

{bundle}/bundle{min:(?:-min)?}{extension:\.(?:js|css)?}

使用此正则表达式,如果您向 foo/bundle-min.css 发出请求,bundle 将是 foomin 将是 -min,而extension 将是 .css.