我在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";} },Java Bean/请求对象
BooleanField locked;
public BooleanField getLocked() {return locked;}杰克逊的文档指出,它可以通过@JsonValue/@JsonCreator做到这一点,但没有提供任何例子。
有人愿意泄露(Java)bean吗?
发布于 2012-02-17 00:22:26
如果您使用的是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用于这两个方面,包括反序列化。
发布于 2016-03-11 20:51:05
在Jackson 2.6或更高版本中,可以将@JsonProperty注释直接应用于枚举常量以更改其序列化:
public enum BooleanField
{
@JsonProperty("1")
BOOLEAN_TRUE,
@JsonProperty("0")
BOOLEAN_FALSE
}发布于 2015-12-23 21:08:49
不要注释它们,只需配置您的ObjectMapper实例:
private ObjectMapper createObjectMapper() {
final ObjectMapper mapper = new ObjectMapper();
// enable toString method of enums to return the value to be mapped
mapper.enable(SerializationFeature.WRITE_ENUMS_USING_TO_STRING);
mapper.enable(DeserializationFeature.READ_ENUMS_USING_TO_STRING);
return mapper;
}并在枚举中覆盖toString()方法:
public enum SectionType {
START("start"),
MORE("more");
// the value which is used for matching
// the json node value with this enum
private final String value;
SectionType(final String type) {
value = type;
}
@Override
public String toString() {
return value;
}
}您不需要任何注释或自定义的反序列化程序。
https://stackoverflow.com/questions/9300191
复制相似问题