如何使用 Jackson json 注释用于反序列化的枚举字段

2022-09-01 01:14:17

我正在使用REST Web Service/Apache Wink和Jackson 1.6.2。如何对枚举字段进行注释,以便 Jackson 对其进行反序列化?

内部类

public enum BooleanField
{
    BOOLEAN_TRUE        { public String value() { return "1";} },
    BOOLEAN_FALSE       { public String value() { return "0";} },

Java Bean/Request object

BooleanField locked;
public BooleanField getLocked() {return locked;}

Jackson文档指出,它可以通过/执行此操作,但没有提供任何示例。@JsonValue@JsonCreator

有人愿意像它一样洒(java)豆吗?


答案 1

如果您使用的是 Jackson 1.9,则序列化将通过以下方式完成:

public enum BooleanField {
   BOOLEAN_TRUE("1")
   ;

   // either add @JsonValue here (if you don't need getter)
   private final String value;

   private BooleanField(String value) { this.value = value; }

   // or here
   @JsonValue public String value() { return value; }

所以你需要的改变是将方法添加到Enum类型本身,所以所有值都有它。不确定它是否适用于子类型。

因为,有一个静态工厂方法就可以了;所以添加这样的东西:@JsonCreator

@JsonCreator
public static BooleanField forValue(String v) { ... }

Jackson 2.0 实际上支持将两者都使用,包括反序列化。@JsonValue


答案 2

Jackson 2.6 或更高版本中,@JsonProperty注释可以直接应用于枚举常量以更改其序列化:

public enum BooleanField
{
    @JsonProperty("1")
    BOOLEAN_TRUE,
    @JsonProperty("0")
    BOOLEAN_FALSE
}