私の REST API では、jersey と ExceptionMapper を使用してグローバルな例外をキャッチしています。アプリがスローするすべての例外でうまく機能しますが、ジャクソンによってスローされた例外をキャッチできません。
たとえば、私のエンドポイントの 1 つは、列挙型を含むオブジェクトを受け入れます。リクエストの Json に enum jersey にない値がある場合、この例外をスローします
Can not construct instance of my.package.MyEnum from String value 'HELLO': value not one of declared Enum instance names: [TEST, TEST2]
at [Source: org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$UnCloseableInputStream@5922e236; line: 3, column: 1] (through reference chain: java.util.HashSet[0]->....)
このマッパーを作成したにもかかわらず
@Provider
@Component
public class JacksonExceptionMapper implements ExceptionMapper<JsonMappingException> {
@Override
public Response toResponse(JsonMappingException e) {
....
}
}
コードがこのマッパーに到達することはありません。
これらの例外をキャッチするために必要なことはありますか?
編集 注:私はあまり一般的ではないことを試みましたが、JsonMappingException の代わりに InvalidFormatException を使用します。この場合、マッパーが呼び出されます。しかし、InvalidFormatException は JsonMappingException を拡張し、同様に呼び出す必要があるため、まだわかりません