问题

Spring Boot 2.7.7使用knife4j进行接口文档整合,发现报了个错误

Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException

排查了半天发现是这个问题

Spring Boot 2.6及以上默认路劲的匹配规则是 PATH_PATTERN_PARSER而Spring Fox使用的路径匹配是基于 ANT_PATH_MATCHER

Spring MVC 源码中两种匹配策略

public static enum MatchingStrategy {

ANT_PATH_MATCHER,

PATH_PATTERN_PARSER;

private MatchingStrategy() {

}

}

MatchingStrategy 枚举类型是在 Spring Boot 2.6.x 版本中引入的,用于 RequestMappingHandlerMapping 的构造函数参数中。这个枚举类型实际上是对 Spring MVC 中默认的两种匹配策略 AntPathMatcher 和 RequestMappingInfoHandlerMapping 的一种封装。

其中,ANT_PATH_MATCHER 对应的是 AntPathMatcher 的匹配策略,而 PATH_PATTERN_PARSER 对应的是 RequestMappingInfoHandlerMapping 的匹配策略。

在 Spring Boot 2.6.x 及以后版本中,可以通过设置 spring.mvc.pathmatch.matching-strategy 属性来选择使用哪种匹配策略。如果不指定该属性,则默认使用 AntPathMatcher 的匹配策

ANT_PATH_MATCHER

ANT_PATH_MATCHER 是 Spring MVC 中常用的一种路径匹配器,它支持使用 Ant 风格的路径表达式来进行请求路径的匹配,例如:

?:匹配任意单个字符。*:匹配任意数量的字符,但不能匹配路径分隔符 /。**:匹配任意数量的字符,包括路径分隔符 /。

除此之外,AntPathMatcher 还支持使用 {} 来定义路径变量,例如

@GetMapping("/users/{userId}")

public User getUser(@PathVariable("userId") Long userId) {

// ...

}

通过 {} 定义的路径变量将被解析为方法参数,从而方便地获取 URL 中的参数值。

PATH_PATTERN_PARSER

PATH_PATTERN_PARSER是一种更复杂的匹配策略,它支持更多的条件匹配,例如:

请求方法匹配(例如 GET、POST 等)。请求头匹配(例如 Content-Type、Accept 等)。请求参数匹配(例如 ?name=value)。

通过这些条件匹配,PATH_PATTERN_PARSER 可以更精确地匹配请求路径,从而更好地处理请求。 不过需要注意的是,由于 PATH_PATTERN_PARSER 的匹配策略更为复杂,所以在大量请求并发的情况下,可能会影响性能。 因此,在一般情况下,推荐使用默认的 AntPathMatcher 匹配策略。

参考链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: