Как создать рабочее настраиваемое сопоставление исключений для анализа JSON? - PullRequest
0 голосов
/ 30 января 2019

Я использую jersey-media-json-jackson-2.27 с внутренним jackson.jaxrs.base, где находится JsonParseExceptionMapper, который используется для отправки «400 неверных запросов в случае получения непарсируемого JSON. Но я хочу свой собственныйНастраиваемый сопоставитель.

Я создал свой собственный настраиваемый сопоставитель исключений.

Я уже пытался установить аннотацию @Priority (1), зарегистрировать ее в моем ResourceConfig как регистр (ApplicationJsonExceptionMapper.class) и с регистром (ApplicationJsonExceptionMapper.class, 1). Также у меня есть регистр (JacksonJaxbJsonProvider.class).

package com.application.provider;

import javax.ws.rs.core.Response;
import javax.ws.rs.ext.ExceptionMapper;
import javax.ws.rs.ext.Provider;

import com.fasterxml.jackson.core.JsonProcessingException;

@Provider
public class ApplicationJsonExceptionMapper implements 
ExceptionMapper<JsonProcessingException> {

    @Override
    public Response toResponse(JsonProcessingException 
jsonProcessingException) {
        String responseMessage = "Invalid JSON";
        return Response.status(Response.Status.BAD_REQUEST).entity(responseMessage).type("text/plain").build();
}

}

К сожалению, когда я отправляю недопустимый JSON, он все еще использует встроенныйв JsonParseExceptionMapper, есть ли у вас какие-либо идеи, чтобы попробовать?

1 Ответ

0 голосов
/ 31 января 2019

JsonProcessingException является суперклассом JsonParseException.Таким образом, имеет смысл, что картограф для JsonParseException вызывается для броска JsonParseException.Если вы хотите переопределить его, создайте свой собственный картограф для JsonParseException.Вам также нужно будет создать его для JsonMappingException, поскольку у Джексона также есть один для этого.

И просто к вашему сведению, чтобы вы понимали, как выбираются картостроители, вот цитата из спецификации JAX-RS

При выборе поставщика сопоставления исключений для сопоставления исключения реализация ДОЛЖНА использовать поставщика, универсальный тип которого является ближайшим суперклассом исключения.

...