美文网首页
JSON序列化枚举类型字段的展现格式

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

作者: awaa | 来源:发表于2018-11-28 10:19 被阅读0次

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

    比如,在进行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序列化枚举类型字段的展现格式

          本文链接:https://www.haomeiwen.com/subject/jcdnqqtx.html