0

いくつかの注釈を持つオブジェクトがあります: @JsonInclude(Include.NON_DEFAULT)@JsonIgnore and@JsonProperty("BLA BLA")`

値が変更されていないフィールドを無視してオブジェクトをシリアル化し、他のフィールドを常に無視する必要があります。シリアル化中に、json文字列内でいくつかのフィールドに異なる名前を付けたいと思います。そのすべてがうまく機能します。私の問題は、いくつかのフィールドを動的に除外しようとするときです! 見つけたすべての例を試しましたが、何も機能しませんでした。フィールドを動的に除外できませんでした。私の他の注釈がそれを妨げているのでしょうか?

これは私のコードです:

@JsonInclude(Include.NON_DEFAULT) 
public class objectFilter implements Serializable {

@JsonIgnore 
private String filterDescription = "";

private String[] address = {"","0","false"};          

@JsonProperty("status.statusCode")
private String[] statusCode = {"","0","false"};      

@JsonIgnore 
private String statusCodeDescription = "";

@JsonProperty("createdUser.userCode")
private String[] createdUser = {"","0","true"};          
@JsonIgnore 
private String createdUserDescription = "";    

@JsonProperty("List.endorsment")
private String[] endorsment1 = {"","0","false"};      
@JsonProperty("endorsment")
private String[] endorsment2 = {"","0","false"};      
@JsonProperty("List.policy")
private String[] policy1 = {"","0","false"};      
@JsonProperty("policy")
private String[] policy2 = {"","0","false"};  

//getters and setters
}

たとえば、 @JsonIgnore を使用していない場合でも、一部のフィールドをシリアル化から除外できるようにしたい: policy2 および endorsment2 を除くすべてのフィールドを、他のフィールドに値が含まれている場合でも除外したい。

これはどのように行うことができますか?

助けてください。

4

2 に答える 2

0

ミックスインを使用する: http://wiki.fasterxml.com/JacksonMixInAnnotations

ミックスイン クラス (またはインターフェイス) のアノテーションを定義し、それをターゲット クラス (またはインターフェイス) と共に使用して、あたかもターゲット クラスがミックスイン クラスが持つすべてのアノテーションを持っているかのように見えるようにします (構成の目的で)シリアライゼーション/デシリアライゼーション)

于 2014-01-16T15:40:28.293 に答える
0

したがって、シリアル化するだけの場合もあれば、すべてのフィールドをシリアルpolicy2endorsement2したい場合もありますか? その場合は、Jackson のJSON ビューを使用してこれを実現できます。まず、このビューのマーカー クラスを作成します。

private interface OnlyPolicyTwoAndEndorsementTwo { }

次に、これら 2 つのフィールドをこのビューに属するものとして設定します。

..........
@JsonView(OnlyPolicyTwoAndEndorsementTwo.class)
@JsonProperty("endorsment")
private String[] endorsment2 = {"","0","false"};      
..........  
@JsonView(OnlyPolicyTwoAndEndorsementTwo.class)
@JsonProperty("policy")
private String[] policy2 = {"","0","false"};

そして今、あなたができる完全なオブジェクトをシリアライズするために:

mapper.writer().writeValueAsString(objectFilter);

または、シリアル化するだけpolicy2endorsement2場合は、次のようにします。

mapper.writerWithView(OnlyPolicyTwoAndEndorsementTwo.class).writeValueAsString(objectFilter);
于 2013-06-12T10:38:15.610 に答える