Open2

HttpMediaTypeNotAcceptableExceptionで詰まった話

ふじしろふじしろ

前提状況

  • ControllerAdviceController内で発生した例外を処理したい
  • ControllerAdviceResponseEntityExceptionHandlerを継承している

発生したこと

  • HttpRequestMethodNotSupportedExceptionを起こしたら、HttpMediaTypeNotAcceptableExceptionも同時に発生した。
    • HttpRequestMethodNotSupportedExceptionは想定通りにハンドリングされた
    • HttpMediaTypeNotAcceptableExceptionはハンドリングに失敗
      • その結果、最終的にDefaultHandlerExceptionResolverが例外処理を行った。
# ハンドリング成功:HttpRequestMethodNotSupportedException
2022-08-22 14:08:12.466  WARN 4539 --- [nio-8080-exec-4] c.t.s.r.c.ProductControllerAdvice        : warn:405 METHOD_NOT_ALLOWED Request method 'GET' not supported

# ハンドリング失敗:HttpMediaTypeNotAcceptableException
2022-08-22 14:08:12.467  WARN 4539 --- [nio-8080-exec-4] .m.m.a.ExceptionHandlerExceptionResolver : Failure in @ExceptionHandler com.teamlab.skillup.restfulapi.controller.ProductControllerAdvice#handleException(Exception, WebRequest)

# 失敗の内容
org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation
 at org..
〜中略〜

# DefaultHandlerExceptionResolverが最終的にエラーを処理
2022-08-22 17:35:38.391  WARN 5688 --- [nio-8080-exec-2] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'GET' not supported]