我在 Jackson 1.6.2 中使用 REST Web 服务/Apache Wink。如何注释枚举字段以便 Jackson 反序列化它?
public enum BooleanField
{
BOOLEAN_TRUE { public String value() { return "1";} },
BOOLEAN_FALSE { public String value() { return "0";} },
BooleanField locked;
public BooleanField getLocked() {return locked;}
Jackson 文档声明它可以通过 @JsonValue
/@JsonCreator
执行此操作,但没有提供示例。
有谁愿意将 (java) bean 泄露出去?
最佳答案
如果您使用的是 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
,包括反序列化。
https://stackoverflow.com/questions/9300191/