[英]How can I use a property of Java Enum when converting to JSON
在將某個Java Enum轉換為JSON時遇到一些困難。 我有以下枚舉:
public enum Color {
BLUE("Blue"), RED("Red");
private String colorName;
Color(final String colorName) {
this.colorName = colorName;
}
@Override
public String toString() {
return colorName;
}
}
轉換為JSON時,我想使用名稱,所以我重寫了toString方法。 我以為就足夠了,但是當我執行此測試時:
Gson gson = new Gson();
assertEquals("Blue", gson.toJson(Color.BLUE));
它失敗! 它給了我“藍色” ...我有什么辦法可以使它返回“藍色”?
我還嘗試了一種@JsonValue批注,該批注可返回名稱但沒有結果。 fastxml @JsonFormat也給我什么...
首先,即使不是原因,也請避免命名屬性名稱。
否則,請像這樣更改您的代碼,它將起作用。
public enum Color {
@SerializedName("Blue") BLUE("Blue"),
@SerializedName("Red") RED("Red");
private String name;
Color(final String name) {
this.name = name;
}
@Override
public String toString() {
return name;
}
}
返回名稱以使用的方法上的@JsonValue
確實起作用。 只要確保您不會意外使用錯誤的Jackson批注(Jackson 2.x需要com.fasterxml.jackson.annotation
批注;而Jackson 1.x則需要com.fasterxml.jackson.annotation
的org.codehaus.jackson
)。 另外,如果您使用的是舊版Jackson,請嘗試升級;否則,請執行以下步驟。 我認為對@JsonValue
支持是在2.4左右添加的。
我自己找到了解決方案,但是StaxMan讓我堅持嘗試:)
我所做的是在Jackson 2.x中添加了注釋,但是在我的測試中,我使用Gson轉換為json。 這些不會一起玩。 因此,當您使用Jackson定義json輸出時,還可以使用Jackson將您的對象轉換為json:
public class ColorTest {
@Test
public void convertToJson() throws JsonProcessingException {
ObjectWriter ow = new ObjectMapper().writer().withDefaultPrettyPrinter();
String json = ow.writeValueAsString(Colors.BLUE);
assertEquals("\"blue\"", json);
}
private enum Colors {
RED("red"), BLUE("blue");
private String colorName;
Colors(final String colorName) {
this.colorName = colorName;
}
@JsonValue
@Override
public String toString() {
return colorName;
}
}
}
奇跡般有效!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.