1

让我们考虑以下对象:

public class MyObject{
    int a, b;

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

    // getters and setters

}

我有以下字符串

{"a":4}

当我使用 Jackson 2 创建一个新对象时a = 4b = 1我假设它是使用空构造函数创建的对象,其中 setter 用于修改 Jackson 2 在字符串中读取的字段)。

现在,我有一个带有a = 1and的 myObject 实例b = 2(与我可以使用空构造函数的实例不同)。如何使用 String 将对象“完成”到a = 4and b = 2?换句话说:如何使用不完整的 json 字符串替换现有对象中的字段值,该对象不同于使用空构造函数创建的对象?

编辑:答案的可能解决方案。

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;
    }
}
4

1 回答 1

1

可以反序列化为已经存在的对象。这样,您的构造函数将只被调用一次。

请参阅有关ObjectMapper.readerForUpdating的文档。这个问题也可能有帮助。

于 2016-12-16T11:55:49.637 回答