Dla mojego REST API używam koszulki i ExceptionMapper, aby wychwycić wyjątki globalne. To działa dobrze wszystkie wyjątki, które moja aplikacja rzuca, ale nie jestem w stanie złapać wyjątku wyrzucony przez jackson.Jersey nie może złapać żadnego wyjątku Jacksona
Na przykład jeden z moich punktów końcowych akceptuje obiekt zawierający wyliczenie. Jeśli JSON we wniosku ma wartość, która nie jest w koszulce enum rzucać wyjątek ten tylną
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.me[email protected]5922e236; line: 3, column: 1] (through reference chain: java.util.HashSet[0]->....)
Nawet Stworzyłem ten mapowania
@Provider
@Component
public class JacksonExceptionMapper implements ExceptionMapper<JsonMappingException> {
@Override
public Response toResponse(JsonMappingException e) {
....
}
}
Kod nigdy nie dotrzeć do tego mapowania.
Czy jest coś, co musimy zrobić, aby uchwycić te wyjątki?
EDIT Uwaga: Mam jus próbował bycia mniej ogólne i zamiast JsonMappingException używam InvalidFormatException w tym przypadku element odwzorowujący nazywa. Ale nadal nie rozumiem, ponieważ wyjątek InvalidFormatException rozszerza JsonMappingException i powinien być również wywoływany
Jaką wersję Jackson? –
jersey-media-json-jackson (2.22.1) ale mam com.fasterxml.jackson.core jackson-adnotations (2.6.3) oraz – Johny19
Jackson ma już [program do tego wyjątku] (https: // github .com/FasterXML/jackson-jaxrs-providers/blob/master/base/src/main/java/com/szybciejxml/jackson/jaxrs/base/JsonMappingExceptionMapper.java). To jest prawdopodobnie używane. –