jackson 枚举 enum json 解析类型 返回数字 或者自定义文字 How To Serialize Enums as JSON Objects with Jackson

在使用枚举的时候,默认system.out.printlin(USERACTION.LOGIN);输出的将会LOGIN,也就是枚举的变量名。当然如果是调用toString方法,可以进行重写返回自定义的字段。

jackson中,序列化枚举的时候,默认返回的是枚举的name,也就是变量名。当然我们想要返回枚举里面的某个值时,可以有以下几个操作。

枚举类:

public enum Distance {
    KILOMETER("km", 1000), 
    MILE("miles", 1609.34),
    METER("meters", 1), 
    INCH("inches", 0.0254),
    CENTIMETER("cm", 0.01), 
    MILLIMETER("mm", 0.001);
 
    private String unit;
    private final double meters;
 
    private Distance(String unit, double meters) {
        this.unit = unit;
        this.meters = meters;
    }
 
    // standard getters and setters
}
  1. Default Enum Representation

使用

new ObjectMapper().writeValueAsString(Distance.MILE);

输出

{"unit":"miles","meters":1609.34}

这种是默认是的方式,但是往往在开发中,并不需要这样的输出。

  1. Enum as Json Object

使用

@JsonFormat(shape = JsonFormat.Shape.OBJECT)
public enum Distance { ... }

输出

{"unit":"miles","meters":1609.34}

这种情况下,枚举将会以对象的方式进行序列化。

  1. Enums and @JsonValue

使用

public enum Distance { 
    ...
  
    @JsonValue
    public String getMeters() {
        return meters;
    }
}

输出

1609.34

这种往往是我们需要的,在需要实际输出的get方法上加上注解@JsonValue

  1. Custom Serializer for Enum
public class DistanceSerializer extends StdSerializer {
     
    public DistanceSerializer() {
        super(Distance.class);
    }
 
    public DistanceSerializer(Class t) {
        super(t);
    }
 
    public void serialize(Distance distance, JsonGenerator generator,
      SerializerProvider provider) 
      throws IOException, JsonProcessingException {
        generator.writeStartObject();
        generator.writeFieldName("name");
        generator.writeNumber(distance.name());
        generator.writeFieldName("unit");
        generator.writeString(distance.getUnit());
        generator.writeFieldName("meters");
        generator.writeNumber(distance.getMeters());
        generator.writeEndObject();
    }
}
@JsonSerialize(using = DistanceSerializer.class)
public enum TypeEnum { ... }
{"name":MILE,"unit":"miles","meters":1609.34}

更多的详细信息

  • https://github.com/FasterXML/jackson-docs/wiki/Presentation-Jackson-2.1-Overview

  • http://deeplyloving.iteye.com/blog/2173168

你可能感兴趣的:(jackson 枚举 enum json 解析类型 返回数字 或者自定义文字 How To Serialize Enums as JSON Objects with Jackson)