Spring Boot 3中WebFlux如何忽略URL末尾斜杠?
Spring Boot 3 WebFlux 配置URL末尾斜杠匹配
在Spring Boot 3中,WebFlux默认不再忽略URL末尾的斜杠。比如你定义了GET接口/users,访问/users/会直接返回404。
之前可以通过实现WebFluxConfigurer并重写configurePathMatching方法修改该行为,但现在setUseTrailingSlashMatch方法已被废弃。官方推荐用PathPatternParser.setMatchOptionalTrailingSeparator(boolean)替代,具体配置有两种方式:
方式一:配置类自定义PathPatternParser
创建配置类,自定义PathPatternParser并指定匹配规则,再注入到对应的路径映射器中:
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.reactive.handler.SimpleUrlHandlerMapping; import org.springframework.web.reactive.router.RouterFunctionMapping; import org.springframework.web.util.pattern.PathPatternParser; @Configuration public class WebFluxPathConfig { @Bean public PathPatternParser pathPatternParser() { PathPatternParser parser = new PathPatternParser(); // 设置为true,允许URL末尾带斜杠的请求匹配 parser.setMatchOptionalTrailingSeparator(true); return parser; } // 适配RouterFunction风格的路由 @Bean public RouterFunctionMapping routerFunctionMapping(PathPatternParser pathPatternParser) { RouterFunctionMapping mapping = new RouterFunctionMapping(); mapping.setPatternParser(pathPatternParser); return mapping; } // 适配@RequestMapping风格的控制器 @Bean public org.springframework.web.reactive.result.method.annotation.RequestMappingHandlerMapping requestMappingHandlerMapping(PathPatternParser pathPatternParser) { org.springframework.web.reactive.result.method.annotation.RequestMappingHandlerMapping mapping = new org.springframework.web.reactive.result.method.annotation.RequestMappingHandlerMapping(); mapping.setPatternParser(pathPatternParser); return mapping; } }
方式二:通过配置文件快速配置
Spring Boot 3提供了现成的配置属性,无需编写代码即可生效:
在application.yml中添加:
spring: webflux: pathmatch: trailing-slash-match: true
或者在application.properties中添加:
spring.webflux.pathmatch.trailing-slash-match=true
这个配置会自动应用到WebFlux的路径解析器上,效果与调用setMatchOptionalTrailingSeparator(true)完全一致,更简洁高效。
注意:如果同时使用自定义配置类和配置文件,配置文件的优先级更高,会覆盖自定义的PathPatternParser设置。
内容的提问来源于stack exchange,提问作者Johan
相关产品推荐
相关产品推荐

