JSON序列化枚举类型字段的展现格式

当我们使用的对象里有枚举类型的字段,我们可能需要的是枚举中不同的属性。

比如,在进行JSON序列化的时候,我们可能需要枚举中的不同属性。

  1. 使用枚举字段的下标,编号。

    {"payStatus":"2"}

  2. 使用字段的Name值

    {"payStatus":"SUCCESS"}

  3. 使用字段的toString方法

    {"payStatus":"支付成功"}

下面这个枚举。

public enum PayStatus {
    /** 未开始支付 - 0 */
    INIT{
        @Override
        public String toString() {
            return "未开始支付";
        }
    },
    /** 用户输入密码 - 1 */
    USERPAYING{
        @Override
        public String toString() {
            return "用户输入密码";
        }
    },
    /** 支付成功 - 2 */
    SUCCESS{
        @Override
        public String toString() {
            return "支付成功";
        }
    }
    ;
}

实体类

public class TestModel {
    
    @Enumerated(value=EnumType.ORDINAL)
    private PayStatus payStatus;

    public PayStatus getPayStatus() {
        return payStatus;
    }
    public void setPayStatus(PayStatus payStatus) {
        this.payStatus = payStatus;
    }
    
}

具体的实现,我们来倒着说

  • 第三种,使用字段的toString方法

    直接在实体类上,说明解析的时候使用toString方法

    @Enumerated(value=EnumType.ORDINAL)
    @JSONField(serialzeFeatures = SerializerFeature.WriteEnumUsingToString)
    private PayStatus payStatus;
    
  • 第二种,使用字段的Name值

    这种的默认就序列化为使用name值,也就是 INIT 、 USERPAYING 、SUCCESS

    这个也可以主动标识一下,如下

    @Enumerated(value=EnumType.ORDINAL)
    @JSONField(serialzeFeatures = SerializerFeature.WriteEnumUsingName)
    private PayStatus payStatus;
    
  • 第一种,直接使用序号。

    ​ 当我们这个字段不需要解析成枚举中的值,也就是想直接读取数据库中存的数字。

    ​ 但是试了多个方法都没在字段上直接加注解实现,看了官方文档的说明,可以在json序列化的时候,全局的使用这种方法。

    ​ 这样使用后,不跟注解的说明冲突,可以混合使用。

    int features= SerializerFeature.config(JSON.DEFAULT_GENERATE_FEATURE, SerializerFeature.WriteEnumUsingName, false);
    return JSON.toJSONString(object,features, SerializerFeature.EMPTY);
    

你可能感兴趣的:(JSON序列化枚举类型字段的展现格式)