• 公用技术——数据格式——JSON——Jackson类库——序列化——格式化


      格式化是指序列化或反序列化时,将属性的值或键值转换为特定的格式。

    常见的场景有:日期,货币,枚举,集合

    特殊字符:NULL,空字符串,存在转义字符的值。

    1、@JsonFormat

    1.1  日期

    在属性上添加@JsonFormat注解, shape指定类型,pattern指定日期格式,timezone指定时区,通常只需要pattern即可

    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/shanghai")
    private Date birthDate;
    

    1.2  枚举

    在枚举类上添加@JsonFormat注解,User对象的Sex属性无需修改。shape指定生成的json字符串结构

    @JsonFormat(shape = JsonFormat.Shape.NUMBER)
    @Getter
    public enum Sex {
        MALE("男"), FEMALE("女");
        private String name;
    
        Sex(String name) {
            this.name = name;
        }
    }
    

      当shape值为NUMBER时,为枚举的顺序,MALE为1,FEMALE为2。json串为{“sex”:1}

      当shape值为String时,为枚举的名称。json串为{“sex”:”MALE”}

      当shape值为Object时,json串为{“fieldProp”:{“enumProp”:”enumVal”}},例如:

    "sex" : {
      "name" : "男"
    },
    

      此时sex为User的枚举属性名称, name为枚举类Sex的属性名称,”男”为MALE的name属性值。

    2、@JsonRawValue

    当属性存在特殊的字符时,序列化时会添加转义字符,在属性上添加@JsonRawValue可以防止转义。

    // 个性签名
    @JsonRawValue
    private String slogan;
    

    3、null

    当属性值为NULL时,在属性或其set方法上添加@JsonSetter注解,设置nulls属性。

    它的值有以下几种:

    SET,TODO

    AS_EMPTY生成空字符串

    SKIP跳过,即忽略该属性

    FAIL整个序列化过程会失败

    DEFAULT默认情况,即会转换为null

    @JsonSetter(nulls = Nulls.AS_EMPTY)
    private String name;
    

    4、转换器

    转换器适用于任何数据类型。实现步骤如下:

    第一步,编写自定义XXConverter,继承StdDateConveter,它有两个泛型参数,第一个指Source,第二个指Destination,例如日期,第一个参数为Date,第二个参数为String。

    public class DateToString extends StdConverter<Date, String> {
    private SimpleDateFormat format = 
    new SimpleDateFormat("yyyy-MM-dd");
        @Override
        public String convert(Date date) {
            return format.format(date);
        }
    }
    

      第二步,在属性上添加@JsonSerialize(序列化)或@JsonDeSerialize(反序列化)注解。

      第三步,设置converter属性为自定义的XXConverter。

    @JsonSerialize(converter = DateToStringConverter.class)
    @JsonDeserialize(converter = StringToDate.class)
    private Date birthDate
  • 相关阅读:
    青蛙学Linux—MySQL常用命令(二)
    青蛙学Linux—MySQL常用命令(一)
    青蛙学Linux—MySQL安装和初始化
    青蛙学Linux—MySQL
    青蛙学Linux—Apache提供HTTPS服务
    青蛙学Linux—Apache配置PHP支持
    青蛙学Linux—Apache+Tomcat实现动静分离以及负载均衡
    青蛙学Linux—Apache负载均衡的实现
    青蛙学Linux—Apache反向代理的实现
    青蛙学Linux—Apache的MPM模式和httpd-mpm.conf
  • 原文地址:https://www.cnblogs.com/rain144576/p/14565064.html
Copyright © 2020-2023  润新知