2016-03-29 5 views
0

私はjackson-annotations 2.4と関連するjarを使ってJSONからPOJOに変換しています。のは、私のJSONに次のように私は構造を持っているとしましょう:JSON構造に対応するPOJOをJacksonでnullにできますか?

person 
{ 
    name 
{ 
    firstName, 
    lastName 
    } 
} 

私のように定義された人のためのPOJOがあります

@JsonIgnoreProperties(ignoreUnknown = true) 
@JsonInclude(JsonInclude.Include.NON_NULL) 
@JsonPropertyOrder({"name"}) 
class Person 
{ 
    private Name name; 

    @JsonProperty("name") 
    public Name getName() 
    { 
    return name; 
    } 

    @JsonProperty("name") 
    public void setName(Name name) 
    { 
    this.name = name; 
    } 
} 

を私は名前のために定義された類似のPOJOをしたとします。今私の質問はのPersonのゲッターはnull値を返すことができますか、それはシーンの背後にインスタンス化されますか?

私はgoogleで検索しましたが、jacksonがヌル値のないフィールドのデフォルト値を返したようですが、構造に何が起こったかについての言及はありませんでしたか?

+0

あなたはそれを試すことができます:) –

答えて

1

これはあなたが解析に使用削除することにより試みることがあります。

{ 
    "name": { 
     "firstname": "abc", 
     "lastname": "xyz" 
    } 
} 

{ 
    "name": { 
    } 
} 

ノード内のフィールドが欠落していても、上記のJSONはいずれもperson.getName()に対してnullを返すことはありません。一方、ノードnameをjsonに渡さないと、person.getName()は常にnullを返します。例えば、このJSONは常にperson.getName()はnullにするようになります:

{ 
    "name": "abc" 
} 
+0

ああ、それはJSONを移入されたサービス/ APIに依存して? – collegian

+1

私は他のフレームワークには答えられませんが、私が知らないあいまいなアノテーションがない限り、JSON上のノードに依存します。ノードによって、私は各JSON内部のオブジェクトです。 – dambros

0

これを試してください。これは間違いなく機能します。私は同じことに直面していたが、これによって解決策を得た。

@JsonInclude(JsonSerialize.Inclusion.NON_NULL) 

または

@JsonInclude(JsonSerialize.Inclusion.NON_EMPTY) 

あなたもすなわち、それはJSONに依存します

@JsonPropertyOrder({"name"}) //remove this 
関連する問題