Когда мы десериализовываем JSON в POJO, JACKSON генерирует исключительную ситуацию несоответствия входных данных в случае несоответствия типов данных, которое ожидается.
Поэтому мой вопрос: «Есть ли в Джексоне или Гсоне флаг какой-либо функции для установки значения по умолчанию для несовпадающего поля во время десериализации?»
Я понимаю, что мы можем реализовать пользовательский десериализатор для таких полей, где можно ожидать случайное входное значение.
Но поддерживается ли это уже с использованием какого-либо флага в любой Java-библиотеке десериализации сериализации?
Пример кода:
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.Data;
import java.io.IOException;
public class JsonSample {
@Data
static class Address {
String houseAddress;
}
@Data
static class InnerJsonClass {
Integer integerField;
Address address;
}
public static void main(String[] args) {
String jsonInput = "{\"integerField\": 1,\"address\":\"hello\"}";
try {
ObjectMapper objectMapper = new ObjectMapper();
InnerJsonClass object = objectMapper.readValue(jsonInput, InnerJsonClass.class);
System.out.println(object.toString());
} catch (IOException e) {
e.printStackTrace();
}
}}
Исключение:
com. ('Привет')
at [Source: (String) "{" integerField ": 1," address ":" hello "}"; строка: 1, столбец: 30] (через цепочку ссылок: com.paytm.logistics.JsonSample $ InnerJsonClass ["address"])
в com.fasterxml.jackson.databind.exc.MismatchedInputException.from (MismatchedInputException.java:63)
в com.fasterxml.jackson.databind.DeserializationContext.reportInputMismatch (DeserializationContext.java:1342)
в com.fasterxml.jackson.databind.DeserializationContext.handleMissingInstantiator (DeserializationContext.java:1031)
в com.fasterxml.jackson.databind.deser.ValueInstantiator._createFromStringFallbacks (ValueInstantiator.java:371)
в com.fasterxml.jackson.databind.deser.std.StdValueInstantiator.createFromString (StdValueInstantiator.java:323)
в com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromString (BeanDeserializerBase.java:1366)
в com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeOther (BeanDeserializer.java:171)
в com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize (BeanDeserializer.java:161)
в com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet (MethodProperty.java:127)
в com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize (BeanDeserializer.java:288)
в com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize (BeanDeserializer.java:151)
в com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose (ObjectMapper.java:4001)
в com.fasterxml.jackson.databind.ObjectMapper.readValue (ObjectMapper.java:2992)
в com.paytm.logistics.JsonSample.main (JsonSample.java:25)