0%

springboot使用Enum序列化和反序列化

说明

// Enum对象
@AllArgsConstructor
@Getter
public enum Type {
    SMS("sms"),
    APP("app"),
    UNKNOWN("unknown"),
    ;
    private String type;
}

// 实际的接口对象,里面有个属性是Enum
@Data
@Accessors(chain = true)
public class Noti {
    private Type type;
    private boolean sync;
}

springboot接口难免用到Enum类型,这个时候如何配置Enum类型序列化和反序列化呢?springboot默认使用的JSON序列化工具是jackson.

使用

// Enum对象
@AllArgsConstructor
@Getter
public enum Type {
    SMS("sms"),
    APP("app"),
    UNKNOWN("unknown"),
    ;
    private String type;

     @JsonCreator
    public static Type fromString(String value) {
        for (Type type : values()) {
            if (type.getType().equalsIgnoreCase(value)) {
                return type;
            }
        }
        return Type.UNKNOWN;
    }

    @JsonValue
    public String getTypeValue() {
        return type;
    }
}

// 实际的接口对象,里面有个属性是Enum
@Data
@Accessors(chain = true)
public class Noti {
    @JsonFormat(shape = JsonFormat.Shape.STRING)
    private Type type;
    private boolean sync;
}

通过以上配置就可以实现, json中的字符串转化成Enum对象,以及Enum对象转化成json中的字符串.