1

次のオブジェクトを考えてみましょう。

public class MyObject{
    int a, b;

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

    // getters and setters

}

次の文字列があります

{"a":4}

Jackson 2 を使用して新しいオブジェクトを作成するa = 4b = 1(Jackson 2 が文字列で読み取るフィールドを変更するためにセッターが使用される空のコンストラクターで作成されたオブジェクトだと思います)。

a = 1これで、 andを使用して myObject のインスタンスがb = 2作成されました (空のコンストラクターで使用できるインスタンスとは異なります)。a = 4String を使用してオブジェクトをandに「完成」させるにはどうすればよい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 に答える