{ "level1": { "value": "a", "anotherValue": "z", "array1": [ { "value": "b", "anotherValue": "z" } ] }}
{ "level1": { "value": "c", "array1": [ { "value": "d" } ] }}{ "level1": { "value": "c", "anotherValue": "z", "array1": [ { "value": "d", "anotherValue": "z" } ] }}{ "level1": { "value": "c", "anotherValue": "z", "array1": [ { "value": "b", "anotherValue": "z" }, { "value": "d", "anotherValue": "z" } ] }}private static void registerDeserializer(ObjectMapper mapper) {
SimpleModule module = new SimpleModule();
module.setDeserializerModifier(new BeanDeserializerModifier() {
@Override
public JsonDeserializer<?> modifyCollectionDeserializer(DeserializationConfig config, CollectionType type, BeanDescription beanDesc, JsonDeserializer<?> deserializer) {
if (List.class.isAssignableFrom(beanDesc.getBeanClass()) && deserializer instanceof CollectionDeserializer) {
CollectionDeserializer collectionDeserializer = (CollectionDeserializer)deserializer;
if (LIST_CLASSES.stream().anyMatch(clazz -> clazz.isAssignableFrom(type.getContentType().getRawClass()))) {
return new CustomCollectionDeserializer(type, null, null, collectionDeserializer.getValueInstantiator());
}
}
return deserializer;
}});
mapper.registerModule(module);
}
public static <T> T mergeObjects(T obj1, String obj2) throws JsonMappingException, JsonProcessingException {
ObjectReader objectReader = mapper.readerForUpdating(obj1);
return objectReader.readValue(obj2);
}
public class CustomCollectionDeserializer extends CollectionDeserializer {
public CustomCollectionDeserializer(JavaType collectionType, JsonDeserializer<Object> valueDeser, TypeDeserializer valueTypeDeser, ValueInstantiator valueInstantiator) {
super(collectionType, valueDeser, valueTypeDeser, valueInstantiator);
}
protected CustomCollectionDeserializer(JavaType collectionType, JsonDeserializer<Object> valueDeser, TypeDeserializer valueTypeDeser, ValueInstantiator valueInstantiator, JsonDeserializer<Object> delegateDeser, NullValueProvider nuller, Boolean unwrapSingle) {
super(collectionType, valueDeser, valueTypeDeser, valueInstantiator, delegateDeser, nuller, unwrapSingle);
}
@Override
protected CollectionDeserializer withResolved(JsonDeserializer<?> dd, JsonDeserializer<?> vd, TypeDeserializer vtd,
NullValueProvider nuller, Boolean unwrapSingle) {
return new CustomCollectionDeserializer(_containerType, (JsonDeserializer<Object>) vd, vtd, _valueInstantiator, (JsonDeserializer<Object>) dd, nuller, unwrapSingle);
}
@Override
public Collection<Object> deserialize(JsonParser p, DeserializationContext ctxt, Collection<Object> intoValue)
throws IOException {
return super.deserialize(p, ctxt, intoValue);
}
}