2016-12-16 1 views
1

Рассмотрит следующий объект:Java начать чтение JSon с заданным начальным объектом

public class MyObject{ 
    int a, b; 

    public MyObject(){ 
     setA(1); 
     setB(1); 
    } 

    // getters and setters 

} 

У меня есть следующая строка

{"a":4} 

, когда я использую Джексон 2, чтобы создать новый объект У меня есть a = 4 и b = 1 (Я предполагаю, что это объект, созданный с помощью пустого конструктора, где сеттеры используются для изменения полей, которые Джексон 2 читает в строке).

Теперь у меня есть экземпляр myObject с a = 1 и b = 2 (отличным от того, который я могу иметь с пустым конструктором). Как я могу использовать String для «завершения» объекта до a = 4 и b = 2? Другими словами: как я могу использовать неполную строку json для замены значений полей в уже существующем объекте, отличном от того, который был создан с помощью пустого конструктора?

EDIT: возможное решение из ответа.

public static Object updateObject(String fileName, Object oldValue){ 
    try { 
     return new ObjectMapper().readerForUpdating(oldValue).readValue(new File(fileName)); 
    } catch (IOException e) { 
     e.printStackTrace(); 
     return oldValue; 
    } 
} 

ответ

1

Можно десериализовать уже существующий объект. Таким образом, ваш конструктор будет вызываться только один раз.

См. Документацию по адресу ObjectMapper.readerForUpdating. Этот question также может помочь.