個人的にAPI自動生成を試してみたく、SpringFoxを導入してみました。
その際にちょっとだけ詰まったので備忘。
前提
この記事を参考にSpringFox導入しました。
ありがとうございます!
問題のエラー
Caused by: java.lang.NullPointerException: Cannot invoke "org.springframework.web.servlet.mvc.condition.PatternsRequestCondition.toString()" because the return value of "springfox.documentation.spi.service.contexts.Orderings.patternsCondition(springfox.documentation.RequestHandler)" is null
at springfox.documentation.spi.service.contexts.Orderings$8.compare(Orderings.java:112) ~[springfox-spi-2.9.2.jar:null]
at springfox.documentation.spi.service.contexts.Orderings$8.compare(Orderings.java:109) ~[springfox-spi-2.9.2.jar:null]
at com.google.common.collect.ComparatorOrdering.compare(ComparatorOrdering.java:37) ~[guava-20.0.jar:na]
at java.base/java.util.TimSort.countRunAndMakeAscending(TimSort.java:355) ~[na:na]
対処法
application.ymlに下記設定を追加しましょう。
エンドポイント(URL)のパターンマッチングに使われてるような気がします(中身はよくみてない)
application.yml
spting:
mvc:
pathmatch:
matching-strategy: ant-path-matcher
Config.java
@Bean
public Docket swaggerPlugin() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.any())
.paths(paths()) //ここのパスマッチングで使われてそう
.build()
.apiInfo(apiInfo());
}
private Predicate<String> paths() {
// ドキュメント生成の対象とするAPIのURLを指定
// この場合、「/user」で始まるAPIがドキュメント生成対象となる
return Predicates.or(Predicates.containsPattern("/user"));
}