Как обработать невалидные значения JSON при сериализции с помощью Jacson?

у меня есть такой json

{“userId”:3,”amount”:1.23,”currency”:”USD”}
{“userId”:4,”amount”:1.24,”currency”:”EUR”}

и такой pojo :

@EqualsAndHashCode
@Setter
@Getter 
@AllArgsConstructor
public class User {
    
    public User( ) {
    }
    
    private long userId;
    
    private long amount;
    
    private String currency;

    private String result;
}

Я предполагаю, что буду сериализовать этот json с помощью jacson и ObjectMapper'а , но у меня есть требование валидировать поле amount, если оно, например, не сконвертится в числовое, или какие-то еще ошибки при парсинге, то в result должно быть значение отличное от, например "OK", с комментарией в чем проблема, возможно ли как-то так скастомизировать jacson, чтобы отлавливать такие ошибки?


Ответы (1 шт):

Автор решения: George_A

Не очень понятно от чего должно быть отлично значение. Но можно получить значение по умолчанию.

String data = "{\“userId\”:3,\”amount\”:1.23,\”currency\”:\”USD\”}";

JsonNode data = new ObjectMapper().readTree(data);

// вариант с получением значения по умолчанию
int amount = data.path("amount").asInt(0);

// Или вариант с получением занчения по умолчанию и/или вывести в лог.
int amount;
JsonNode amountNode = data.path("amount");
if(!amountNode.isMissingNode() && amountNode.isInt()) {
   amount = amountNode.getInt();
}
else {
   amount = 0;
   System.out.error("The amount field missed or not integer: " + data);
}
→ Ссылка