Как обработать невалидные значения 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);
}