Как заставить readerForUpdating.readValue() не переопределять ненулевые значения?

#java #json #jackson

#java #json #джексон

Вопрос:

У меня есть следующие два класса :

 public class Simple {

    String a;
    String b;
    SubSimple subSimple;
}

public class SubSimple {

    String a;
    String b;
}
  

Какие изменения я могу внести в следующий ObjectMapper, чтобы ненулевые значения не обновлялись до null :

         Simple simple = new Simple();
        simple.setA("0a");
        simple.setSubSimple(new SubSimple());
        simple.getSubSimple().setA("00a");

        String json = "{"b" : "b", "subSimple" : {"b" : "b"}}";
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
        objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,false);


        simple = objectMapper.readerForUpdating(simple).readValue(json);

        System.out.println("simple : "   simple);
  

Текущий вывод :

просто: Simple{a=’0a’, b=’b’, subSimple=SubSimple{a=’null’, b=’b’}}

Требуется :

просто: Simple{a=’0a’, b=’b’, subSimple=SubSimple{a=’00a’, b=’b’}}

Ответ №1:

Попробуйте использовать com.fasterxml.jackson.annotation.JsonMerge аннотацию:

 class Simple {

    String a;
    String b;

    @JsonMerge
    SubSimple subSimple;
}
  

или включить его в com.fasterxml.jackson.databind.ObjectMapper экземпляре:

 objectMapper.setDefaultMergeable(Boolean.TRUE);