转换为JSON时如何使用Java Enum属性
我在将某个Java枚举转换为JSON时遇到了一些困难。我有以下枚举:转换为JSON时如何使用Java Enum属性,java,json,enums,jackson,gson,Java,Json,Enums,Jackson,Gson,我在将某个Java枚举转换为JSON时遇到了一些困难。我有以下枚举: public enum Color { BLUE("Blue"), RED("Red"); private String colorName; Color(final String colorName) { this.colorName = colorName; } @Override public String toString() { re
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注释。fasterxml@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需要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;
}
}
}
工作起来很有魅力 name字段是虚构的,我将在示例代码中更改它。例如,是否有可能在整个类上使用注释,该注释表示“当您尝试获取名称时,请返回此字段”?我不这样认为,但您可以创建它,这是一个好主意!我的答案对你有用吗?可能有用,但我认为这是一个丑陋的解决方案。我正在寻找像“@JsonValue”或“@JsonFormat”这样的注释,但我不明白它们为什么不起作用。尝试创建自己的注释如果您对答案满意,您能接受吗?