@JsonSerialize序列化注解的使用

 更新时间:2024年08月23日 08:35:48   作者:200.OK  
这篇文章主要介绍了@JsonSerialize序列化注解的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

@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);
    }
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java并发机制的底层实现原理分析

    Java并发机制的底层实现原理分析

    本文主要介绍了Java中并发编程中常用的一些机制,包括volatile、synchronized和原子操作,volatile是轻量级的同步机制,保证了共享变量的可见性;synchronized是一种重量级的同步机制,通过加锁和解锁来保证线程安全
    2025-01-01
  • 仅用5分钟极速入门Dubbo使用教程

    仅用5分钟极速入门Dubbo使用教程

    今天给大家介绍一款高性能、透明的远程过程调用框架dubbo,通过本文学习可以快速掌握Dubbo知识,感兴趣的朋友跟随小编一起看看吧
    2021-06-06
  • java ant包中的org.apache.tools.zip实现压缩和解压缩实例详解

    java ant包中的org.apache.tools.zip实现压缩和解压缩实例详解

    这篇文章主要介绍了java ant包中的org.apache.tools.zip实现压缩和解压缩实例详解的相关资料,需要的朋友可以参考下
    2017-04-04
  • java匿名内部类实例简析

    java匿名内部类实例简析

    匿名类是不能有名称的类,所以没办法引用它们,必须在创建时,作为new语句的一部分来声明它们,需要了解更多的可以参考本文
    2012-11-11
  • springboot实现用户名查找用户功能

    springboot实现用户名查找用户功能

    本文主要介绍了springboot实现用户名查找用户功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • java 数据结构之堆排序(HeapSort)详解及实例

    java 数据结构之堆排序(HeapSort)详解及实例

    这篇文章主要介绍了java 数据结构之堆排序(HeapSort)详解及实例的相关资料,需要的朋友可以参考下
    2017-03-03
  • Java开发常见异常及解决办法详解

    Java开发常见异常及解决办法详解

    这篇文章主要介绍了java程序常见异常及处理汇总,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2021-09-09
  • Java根据URL下载文件到本地的2种方式(大型文件与小型文件)

    Java根据URL下载文件到本地的2种方式(大型文件与小型文件)

    这篇文章主要给大家介绍了关于Java根据URL下载文件到本地的2种方式,分别是大型文件与小型文件,避免内存溢出OOM,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-01-01
  • Hibernate缓存详解

    Hibernate缓存详解

    本文主要介绍了Hibernate缓存的相关知识。具有很好的参考价值,下面跟着小编一起来看下吧
    2017-02-02
  • Java实现读取CSV文件并将数据放入对象

    Java实现读取CSV文件并将数据放入对象

    CSV文件是一种常见的数据存储格式,广泛应用于数据交换,日志记录和表格数据处理,在Java开发中,读取CSV文件并将数据映射到对象中是常见的需求,本文将详细介绍几种常见方法,有需要的可以了解下
    2025-06-06

最新评论