其他分享
首页 > 其他分享> > spring boot 基于正则的url映射

spring boot 基于正则的url映射

作者:互联网

基于正则的url映射:它支持{名称:正则表达式}的写法,以另一种风格限制url的映射。

//正则表达式
    @RequestMapping(value="/student/{name:\\w+}-{age:\\d+}")
    public @ResponseBody String regUrl(@PathVariable String name,@PathVariable int age){
    	return "name:"+name+" age:"+age;
    }
例如上面的URL就只能匹配如:

localhost:8080/context/student/wangwu-33 或者
localhost:8080/context/student/zhao4-22

 正则表达式的写法如下:

@RequestMapping(value = "/{name:(?!fonts|oauth|webjars|swagger|images)[a-z][0-9a-z-]{3,31}}/**",method = {RequestMethod.POST, RequestMethod.GET}) 
public void homePage(HttpServletRequest request, HttpServletResponse response ,@PathVariable String name) { }

表示name满足4--32位以字母开头的字母与数字字符,并且不包括fonts、oauth、webjars、swagger、images这几个词。

系统访问的url在后台有多个接口匹配时,定义最精确的会被匹配。

@RequestMapping(value = "/{name:([a-z][0-9a-z-]{3,31}}/**",method = {RequestMethod.GET})
 
public void test1(@PathVariable String name){
 
}
 
@RequestMapping(value = "/{name:([a-z][0-9a-z-]{3,31}}/mytest",method = {RequestMethod.GET})
 
public void test2(@PathVariable String name){
 
}
 
@RequestMapping(value = "/test/mytest",method = {RequestMethod.GET})
 
public void test3(){
 
}

访问接口  /test/mytest 时,虽然三个接口都满足,但是请求会到test3方法

访问接口/myapi/mytest时,请求会到test2方法

demo:

public class AssetServerController {

    @RequestMapping(value = {"/**/{path:[^\\\\.]*}","/{path:^(?!/assets/).*}","/{path:^(?!/api/).*}"}, method = RequestMethod.GET)
    public String index() {
        return"forward:/";
    }

}
@GetMapping(value = {"/", "/{path:(?!.*doc).+}", "/{folder:^(?!swagger-ui).*$}/{page}"})
    public String showPage(@PathVariable(value = "folder", required = false) String folder,
        @PathVariable(value = "page", required = false) String page,
        @RequestParam(required = false) Map<String, String> parms, @NotNull ModelMap result) {
        result.mergeAttributes(parms);
        page = CharSequenceUtil.isNotBlank(folder) ? folder + "/" + page : page;
        page = CharSequenceUtil.isNotBlank(page) ? page : "/";
        log.info("get page:" + page);
        return page;
    }

@RequestMapping(value = "/route/to-{destination:^((?!-from-).)+}.html", method = {RequestMethod.GET, RequestMethod.HEAD})

"/route/to-{destination:(?!.*-from-).+}.html"

value = {"/{path:(?!.*assets).+}/**"}

标签:name,url,spring,boot,value,public,RequestMethod,page,String
来源: https://blog.csdn.net/dfq20020319/article/details/121570159