Как поймать JsonParseException из конечной точки REST - PullRequest
0 голосов
/ 14 мая 2018

У меня есть такая конечная точка:

@POST
public Response update(MyDocument myDocument){}

Если запрос недействителен, мой сервер получит довольно длинные журналы, подобные этому:

javax.servlet.ServletException: org.glassfish.jersey.server.ContainerException: com.fasterxml.jackson.core.JsonParseException: Unexpected character....
...
Caused by...
...
Caused by...

Исключение трудно полностью избежать, поэтому мне интересно, как я могу поймать JsonParseException?

1 Ответ

0 голосов
/ 14 мая 2018

Реализация ExceptionMapper для JsonParseException. Это позволит вам сопоставить данное исключение с ответом. Смотрите пример ниже:

@Provider
public class JsonParseExceptionMapper implements ExceptionMapper<JsonParseException> {

    @Override
    public Response toResponse(JsonParseException exception) {
        return Response.status(Response.Status.BAD_REQUEST)
                       .entity("Cannot parse JSON")
                       .type(MediaType.TEXT_PLAIN)
                       .build();
    }
}

И затем зарегистрируйте его с приоритетом привязки в вашем ResourceConfig подклассе (см. Примечания) :

@ApplicationPath("api")
public class JerseyConfig extends ResourceConfig {

    public JerseyConfig() {
        register(JsonParseExceptionMapper.class, 1);
    }
}

Если вы не используете подкласс ResourceConfig, вы можете аннотировать ExceptionMapper с помощью @Priority (см. Примечания) :

@Provider
@Priority(1)
public class JsonParseExceptionMapper implements ExceptionMapper<JsonParseException> {
    ...
}

Примечание 1: Вам также может быть полезно создать еще один ExceptionMapper для JsonMappingException.

Примечание 2: Предоставление приоритета своим собственным ExceptionMapper s особенно полезно, если у вас зарегистрировано JacksonFeature и вы хотите переопределить поведение JsonParseExceptionMapper и JsonMappingExceptionMapper, которые поставляются с модулем jackson-jaxrs-json-provider. Подробнее см. ответ .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...