Настройка исключения, выдаваемого Джексоном Биндом по стандарту GAE - PullRequest
0 голосов
/ 16 февраля 2019

Я искал способ настроить исключение, генерируемое Jackson bind для GAE.

Проблема в том, что когда я отправляю строковый параметр, где API метод ожидает Integer бросает Jackson х InvalidFormatException.Я хочу настроить сообщение, выданное исключением, но не смог найти способ.Пожалуйста, помогите с этим.

Например:

@Api(
name = "echo",
version = "v1",
namespace =
@ApiNamespace(
    ownerDomain = "echo.example.com",
    ownerName = "echo.example.com",
    packagePath = ""
),
issuers = {
    @ApiIssuer(
        name = "firebase",
        issuer = "https://securetoken.google.com/YOUR-PROJECT-ID",
        jwksUri =
            "https://www.googleapis.com/service_accounts/v1/metadata/x509/securetoken@system"
                + ".gserviceaccount.com"
    )
})

public class Echo {
   @ApiMethod(name = "echo")
   public Message echo(Message message, @Named("n") @Nullable Integer n) {
      return doEcho(message, n);
   }    
}

В приведенном выше коде, если конечная точка эха поражена полезной нагрузкой

enter image description here

, тогда ответ:

enter image description here

В этом случае возможно создать пользовательское исключение или настроить сообщение

1 Ответ

0 голосов
/ 16 февраля 2019

Для этого вам необходимо зарегистрироваться DeserializationProblemHandler

ObjectMapper mapper = new ObjectMapper();
mapper.enable(SerializationFeature.INDENT_OUTPUT);
mapper.addHandler(new DeserializationProblemHandler() {
    @Override
    public Object handleWeirdStringValue(DeserializationContext ctxt, Class<?> targetType, String valueToConvert, String failureMsg) throws IOException {
        System.out.println("Handle parse problem for value = " + valueToConvert);
        throw new CanNotParseJsonException("Can not deserialise " + valueToConvert, null);
    }
});

Ваше исключение должно быть расширено JsonMappingException, в противном случае оно будет перенесено.Пример исключения:

class CanNotParseJsonException extends JsonMappingException {

    public CanNotParseJsonException(String msg, Throwable problem) {
        super(null, msg, problem);
    }
}

См .:

  1. Конфигурирование проблемы десериализации Джексона в среде Spring
  2. Невозможно установить ProblemHandlerв ObjectMapper в Spring Boot
  3. Исходный код Java
...