はじめに
Spring BootとJerseyでできたアプリケーションがエラーハンドリングで問題が起きていたのでまとめます
問題
Spring BootとJerseyでAPIを作成したのですが、なぜか内部エラー(500)がすべて404になってしまっていました
class JerseyConfig : ResourceConfig() {
init {
(省略)
register(RuntimeExceptionMapper::class.java)
register(NotFoundExceptionMapper::class.java)
register(QueryParamExceptionMapper::class.java)
register(BadRequestExceptionMapper::class.java)
}
}
Jerseyではエラーハンドリングを初期設定しています
このエラーハンドリングを消すとちゃんと500エラーが返ってくるようになりましたが、以下のエラーが出ました
request url is /error
なぜか内部でエラーページを返そうとしていました
解決方法
@SpringBootApplication
@EnableAutoConfiguration(
exclude = [DataSourceAutoConfiguration::class, DataSourceTransactionManagerAutoConfiguration::class, JpaRepositoriesAutoConfiguration::class]
exclude = [
(省略)
ErrorMvcAutoConfiguration::class // 追加
]
どうもJerseyではエラーガでるとページをデフォルトで返すようでこれが問題になっていました
そもそもSpirng MVCでなく、Spring Boot restを使っていればJerseyを使わないで済むのでそっちのほうがよさそうです
おわりに
Spring Bootは本当に魔法が多くて難しいなと毎度思います