有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JavaSpringBoot:我们可以使用regex将部分请求映射作为可选的吗?

我有一个具有多个请求映射的端点,如:

@PutMapping(path = {
       "/A/{ACode}/B/{BCode}/C/{CCode}/D/{DCode}",
       "/A/{ACode}/B/{BCode}/D/{DCode}",
       "/A/{ACode}/C/{CCode}/D/{DCode}",
       "/A/{ACode}/D/{DCode}"
})

其中ACode、BCode、CCode和DCode都是路径变量。B、 C及其各自的代码是可选的,而A、D及其各自的代码是强制性的

我可以通过以下方式调用上述API:

PUT /A/IN/B/delhi/C/central/D/110001
PUT /A/IN/B/delhi/D/110001
PUT /A/IN/C/central/D/110001
PUT /A/IN/D/110001

我试图将所有这些请求映射组合成一个可以匹配所有这些组合的正则表达式

我尝试在映射中使用此正则表达式,但不起作用:

@PutMapping(path = {
       "A/{ACode:[A-Z]+}(/B/{BCode:[a-z0-9-]+})?(/C/{CCode:[a-z0-9-]+})?/D/{DCode:[a-z0-9-]+}"
})

这一个可以工作,但它不能使B、C和相应的代码可选,因此不能使用:

@PutMapping(path = {
       "A/{ACode:[A-Z]+}/B/{BCode:[a-z0-9-]+}/C/{CCode:[a-z0-9-]+}/D/{DCode:[a-z0-9-]+}"
})

我使用的正则表达式是否有什么问题,或者除了使用请求参数代替路径变量之外,是否还有其他解决方法来实现这种功能

谢谢你的帮助


共 (0) 个答案