正在使用名称()和值序列化枚举



我有一个简单的(groovy(枚举:

enum OutputType { 
skip( 'gray' ), left( 'orange' ), right( 'cyan' )
final String color

private OutputType( String color ) {
this.color = color
}  
}

我想用Jackson序列化它,使它看起来像(伪JSON(:

{ skip:gray, left:orange, right:cyan }

或者换句话说是CCD_ 1到CCD_。

如何用普通的杰克逊做到这一点?

假设您的枚举如下所示:

public enum OutputType {
SKIP("gray"),
LEFT("orange"),
RIGHT("cyan");
private final String color;
public String getColor() { return color; }
OutputType(String color) {
this.color = color;
}
}

您需要像这样扩展Jackson的JsonSerializer,并创建自己的实现:

public class OutputTypeSerializer extends JsonSerializer<OutputType> {
@Override
public void serialize(OutputType value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
if (null == value) {
gen.writeNull();
} else {
gen.writeString(value.getColor());
}
}
}

然后假设您有一个带有OutputType字段的dto,那么唯一需要做的就是添加正确的注释,如下所示:

public class OutputDto {

@JsonSerialize(using = OutputTypeSerializer.class)
private OutputType type;
public OutputType getType() { return type; }
public void setType(OutputType type) { this.type = type; }

}

相反,如果需要从给定的JSON资源中重新创建OutputType对象,则可以实现JsonDeserializer

最新更新