2015-10-27 28 views
0

我寫過我的CustomJsonSerializer,我希望它能自動序列化所有使用@JsonProperty進行註釋的字段,所以我只剩下序列化沒有註釋並需要「特殊照護」。如何自動序列化JsonSerializer類中的所有帶註釋的字段

例如:我有這個POJO

類播放器{

@JsonProperty(user_id) 
private long userId; 

private byte[] history; 
} 

我的自定義序列:

public class JsonPlayerSerializer extends JsonSerializer<Player> { 

    @Override 
    public void serialize(Player player, JsonGenerator gen,  
     SerializerProvider provider) throws IOException, JsonProcessingException { 

      // I would like to add some code here that automatically would add all annotated fields. 

      gen.writeObjectField("history_moves", new JsonObject().put("$binary", myMoves)); 
    } 
} 
+0

http://stackoverflow.com/questions/4168095/ jackson-ignore-json-configuration-value – Deshan

回答

1
class Player { 

    @JsonProperty(user_id) 
    private long userId; 

    @JsonIgnore 
    private byte[] history; 
    } 

在您的自定義序列化調用,因此父串行方法會繼續序列化。

public class JsonPlayerSerializer extends JsonSerializer<Player> { 

    @Override 
    public void serialize(Player player, JsonGenerator gen,  
     SerializerProvider provider) throws IOException, JsonProcessingException { 


      super.serialize(player,gen,provider); 
      gen.writeObjectField("history_moves", new JsonObject().put("$binary", myMoves)); 
    } 
} 

或者 如這裏 Jackson JSON custom serialization for certain fields

class Player { 

     @JsonProperty(user_id) 
     private long userId; 

     @JsonSerialize(using = JsonPlayerSerializer .class) 
     private byte[] history; 
     } 

提到使用串行只爲歷史字段

public class JsonPlayerSerializer extends JsonSerializer<Player> { 

    @Override 
    public void serialize(Player player, JsonGenerator gen,  
     SerializerProvider provider) throws IOException, JsonProcessingException { 

      gen.writeObjectField("history_moves", new JsonObject().put("$binary", myMoves)); 
    } 
} 
+0

謝謝!如此簡單和如此正確。 – Shvalb

相關問題