2017-01-16 5 views
3

は、私はクラス ジャクソンマッパーは

public class Foo { 
    private Bar bar; 
} 

フー

とバー

public class Bar { 
    private String fizz; 
    private String bang; 
} 

EDITを持っていると言う空のオブジェクトの代わりに、ヌルをシリアライズ:明確化のために、私はfooとbarを所有していないと、これらのクラスを変更することはできません。

Foo型の空のオブジェクトをシリアル化する場合は、その型のメンバーBarがnullとして返されます。

String json = objectMapper.writeValueAsString(new Foo()); // "{"bar" : null}" 

私はバーの新しいインスタンスをインスタンス化することと、その後はFooの新しいインスタンスにそれを追加することなく、空のバーオブジェクトをシリアル化するオブジェクトマッパーを得ることができる方法はありますか?

String json = objectMapper.writeValueAsString(new Foo()) // "{bar": {"fizz" : null, "bang" : null } }" 
+0

'bar'が宣言されている' Bar'オブジェクトを初期化してみませんか? –

+0

申し訳ありません私はこれを明確にするのを忘れてしまった、私はFooとBarを所有しておらず、それらを変更することはできません。 – user3335313

答えて

0

いいえこれを行う方法はありません。 Barを初期化しないと、の内部にnullとなります。あなたはこれらのクラスを変更することはできませんのでFoo内部Barnullある場合

、あなただけチェックすることができ、それがあれば、それを初期化し、あなたが望む結果を得るでしょう。

Bar bar = foo.getBar(); 
if (bar == null) { 
    foo.setBar(new Bar()); 
} 
String json = objectMapper.writeValueAsString(foo); 

jsonには、次のことになります。

{ 
    "bar" : { 
     "fizz" : null, 
     "bang" : null 
    } 
} 

この情報がお役に立てば幸いです。

0

Fooオブジェクトをシリアライズするためのカスタムシリアライザを作成できます。その後、カスタムFooSerializerの実装では、ヌルバー値をチェックして、デフォルトのバーインスタンスとしてシリアル化します。カスタムシリアライザの作成例については、https://spin.atomicobject.com/2016/07/01/custom-serializer-jackson/またはhttp://www.baeldung.com/jackson-custom-serializationを参照してください。

関連する問題