我在Spring Boot Rest Controller中通过@RequestMapping(GET)映射了以下路由
/base/{baseName}
/base/{baseName}/next/{nextName}
我也有以下通配符路由
1. /base/{baseName}/**
2. /base/{baseName}/next/{nextName}/*
在以下情况下应做的工作
GET /base/baseName
GET /base/baseName/foo # Hits 1
GET /base/baseName/foo/bar/etc # Hits 1
GET /base/baseName/next/nextName
GET /base/baseName/next/nextName/foo # Hits 2
唯一不起作用的情况是
GET /base/baseName/next/nextName/foo/bar... # Hits 1
因为我希望它打到路线 2 。
这是行不通的,因为Spring Boot中的匹配优先级指示通配符路由1和2具有相同的值(每个通配符1点,每个模板1点)。
由于路由2不能匹配无限目录,所以它不起作用。如果要添加其他通配符,则路由1始终优先。
是否可以更改优先级规则或重组映射?
答案 0 :(得分:0)
这些是蚂蚁风格的正则表达式,其中/*
表示1且仅是一个级别,而/**
表示多个级别。因此它确实会与第一个匹配,因为它根本不匹配第二个。您还需要将/**
添加到第二个。或者,如果您想要1或2个目录,请添加其他路径映射({value
需要一个String[]
!)。
根据需要使用/**
或第二个映射。
@RequestMapping(value="/base/{baseName}/next/{nextName}/**")
或第二个映射(如果您只想深入1或2层)。
@RequestMapping(value= {
"/base/{baseName}/next/{nextName}/*",
"/base/{baseName}/next/{nextName}/*/*" })