欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

@JsonSerialize序列化注解的使用,

来源: javaer 分享于  点击 18842 次 点评:219

@JsonSerialize序列化注解的使用,


目录
  • @JsonSerialize序列化注解
    • 先创建一个类
    • 小数点保留一位数
    • 小数点保留2位数(保留三位同理定义三位小数即可)
    • 在excel导出的时候——拼接单位
  • 总结

    @JsonSerialize序列化注解

    JSON 是数据交换的通用格式

    @JsonSerialize注解是Jackson 库中的一部分,用于定义在将 Java 对象序列化为 JSON 格式时,如何进行定制化处理的方式。

    Jackson 是一个流行的 Java 库,用于处理 JSON 数据的序列化和反序列化。可以在字段、方法或者类级上自定义序列化类。有using 属性,允许指定一个自定义的序列化器(Serializer)类,来决定如何将 Java 对象转换为 JSON 数据。

    用来自定义需要转换为JSON数据,可以用在类上,自定义对这个类的JSON处理,也可以用在字段上自定义对字段的处理,例如日期格式、小数点保留几位,是否准换为1或0

    先创建一个类

    package com.test.hello.vo;
     
    import com.test.hello.utils.Customer1DoubleSerialize;
    import com.test.hello.utils.CustomerDoubleSerialize;
    import com.fasterxml.jackson.databind.annotation.JsonSerialize;
    import io.swagger.annotations.ApiModelProperty;
    import lombok.AllArgsConstructor;
    import lombok.Builder;
    import lombok.Data;
    import lombok.NoArgsConstructor;
     
    @Data
    @Builder
    @AllArgsConstructor
    @NoArgsConstructor
    public class TestVo {
     
        //使用方法,直接加载需要保留小数的字段上
        @JsonSerialize(using = Customer1DoubleSerialize.class)
        private Double num;
     
        @ApiModelProperty("id")
        private String Id;
     
        @ApiModelProperty("名")
        private String name;
     
        @ApiModelProperty("数据类型")
        @ExcelProperty(converter = UnitConverter.class)
        private String dataType;
     
     
    }

    小数点保留一位数

    package com.test.hello.utils;
     
    import com.fasterxml.jackson.core.JsonGenerator;
    import com.fasterxml.jackson.databind.JsonSerializer;
    import com.fasterxml.jackson.databind.SerializerProvider;
     
    import java.io.IOException;
    import java.math.RoundingMode;
    import java.text.DecimalFormat;
     
    public class Customer1DoubleSerialize extends JsonSerializer {
        private DecimalFormat df = new DecimalFormat("0.0");
        @Override
        public void serialize(Object o, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
            df.setRoundingMode(RoundingMode.HALF_DOWN);
            if(o.toString() != null && !"-".equals(o)) {
                Double dd=Double.parseDouble(o.toString());
     
                jsonGenerator.writeString(df.format(dd));
     
            } else{
                jsonGenerator.writeString(o.toString());
     
            }
        }
    }

    小数点保留2位数(保留三位同理定义三位小数即可)

    package com.test.hello.utils;
     
    import com.fasterxml.jackson.core.JsonGenerator;
    import com.fasterxml.jackson.databind.JsonSerializer;
    import com.fasterxml.jackson.databind.SerializerProvider;
     
    import java.io.IOException;
    import java.math.RoundingMode;
    import java.text.DecimalFormat;
     
    public class CustomerDoubleSerialize extends JsonSerializer {
        private DecimalFormat df = new DecimalFormat("0.00");
        @Override
        public void serialize(Object o, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
            df.setRoundingMode(RoundingMode.HALF_DOWN);
            if(o.toString() != null && !"-".equals(o)) {
                Double dd=Double.parseDouble(o.toString());
     
                jsonGenerator.writeString(df.format(dd));
     
            } else{
                jsonGenerator.writeString(o.toString());
     
            }
        }
    }

    在excel导出的时候——拼接单位

    package com.test.hello.utils;
     
    import com.alibaba.excel.converters.Converter;
    import com.alibaba.excel.enums.CellDataTypeEnum;
    import com.alibaba.excel.metadata.GlobalConfiguration;
    import com.alibaba.excel.metadata.data.WriteCellData;
    import com.alibaba.excel.metadata.property.ExcelContentProperty;
     
    public class UnitConverter implements Converter<String> {
        @Override
        public Class<?> supportJavaTypeKey() {
            return Converter.super.supportJavaTypeKey();
        }
     
        @Override
        public CellDataTypeEnum supportExcelTypeKey() {
            return Converter.super.supportExcelTypeKey();
        }
     
        @Override
        public WriteCellData<?> convertToExcelData(String value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
            String dateValue = "";
            if (value.equals("2D")) {
                dateValue = "km";
            } else if (value.equals("3D")) {
                dateValue = "km2";
            }
            return new WriteCellData<>(dateValue);
        }
    }

    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持3672js教程。

    您可能感兴趣的文章:
    • SpringBoot @JsonDeserialize自定义Json序列化方式
    • @JsonSerialize(using = LongToStringUtil.class)注解的使用方式
    • SpringBoot返回long,前端接收进度丢失,@JsonSerialize不生效问题
    • @JsonSerialize注解的使用示例教程
    • @JsonDeserialize和@JsonSerialize注解的使用方式
    相关栏目:

    用户点评