2016-11-09 20 views
0

我JSON數據如下圖所示:地圖JSON數據的Spring數據JPA與傑克遜註釋預期值

{ 
    "data":[ 
    {"val":"1"}, 
    {"val":"2"}, 
    {"val":"3"} 
    ] 
} 

但我希望這樣的事情

{ 
    "data":[ 
    {"val":"Red"}, 
    {"val":"Green"}, 
    {"val":"Blue"} 
    ] 
} 


@Column(name = "colorname") 
@JsonProperty("val") 
String colorName; 

有什麼傑克遜註解將這些數字映射到colorNames,同時轉換爲Pojos?或者有什麼更好的方法來獲得預期的結果?

+1

爲此,你需要定義你的定製序列。請看看http://stackoverflow.com/questions/34297506/how-can-i-serialiize-deserialize-a-boolean-value-from-fasterxml-jackson-as-an-in –

+1

使用自定義解串器或自定義setColorName()方法 –

回答

1

你可以在下就像建立一個有序枚舉:

public enum Color { 
    Green, 
    Blue, 
    Red 
    //and so on 
} 

那麼你就需要一個定製的解串器,你只需要像做下一個(指定field name將鍵和writeString與色彩值):

public class ColorSerializer extends StdSerializer<Color> { 

    public ColorSerializer() { 
     this(null); 
    } 

    public ColorSerializer(Class<Color> t) { 
     super(t); 
    } 

    public void serialize(Color value, JsonGenerator gen, SerializerProvider provider) 
     throws IOException, JsonProcessingException { 
     gen.writeStartObject(); 
     gen.writeFieldName("val"); 
     gen.writeString(value.toString()); 
     gen.writeEndObject(); 
    } 
} 

您必須指定使用上述顏色枚舉作爲一個註解@JsonSerialize使用該序列化您的枚舉:

@JsonSerialize(using = ColorSerializer.class) 
public enum Color { 
    //.... 
} 

最後,您必須在colorName類型屬性更改爲Color枚舉類型,而不是字符串和註釋爲Enumarted序式(JPA)

@Enumerated(EnumType.ORDINAL) 
Color color; 
+0

感謝Pau的評論。我需要一個反序列化器來從JSON中獲取值。但現在已經解決了。 – FlintOff