我有一个简单的(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
。