@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 数据结构与算法系列精讲之排序算法

    排序算法是《数据结构与算法》中最基本的算法之一。排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存
    2022-02-02
  • java组件commons-fileupload文件上传示例

    java组件commons-fileupload文件上传示例

    这篇文章主要为大家详细介绍了java组件commons-fileupload实现文件上传,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-10-10
  • Java多线程中的ThreadPoolExecutor解读

    Java多线程中的ThreadPoolExecutor解读

    这篇文章主要介绍了Java多线程中的ThreadPoolExecutor解读,线程池中的核心线程数,当提交一个任务时,线程池创建一个新线程执行任务,直到当前线程数等于corePoolSize;如果当前线程数为corePoolSize,继续提交的任务被保存到阻塞队列中,等待被执行,需要的朋友可以参考下
    2023-09-09
  • SpringBoot三种打包方法举例详解

    SpringBoot三种打包方法举例详解

    这篇文章主要给大家介绍了关于SpringBoot三种打包方法的相关资料,Spring Boot是一个开发框架,目的是简化Spring应用的初始搭建过程和开发过程,文中提供了3种打包方法,需要的朋友可以参考下
    2023-12-12
  • Java中的四种单例模式浅析

    Java中的四种单例模式浅析

    这篇文章主要给大家介绍了关于Java中四种单例模式的相关资料,其中包括饿汉式、懒汉式、懒汉式(双重锁)及内部类等四种,分别给出了详细的示例代码和介绍,需要的朋友们下面来一起看看吧。
    2017-05-05
  • 使用Java实现加密之AES加解密

    使用Java实现加密之AES加解密

    这篇文章主要介绍了使用Java实现加密之AES加解密,AES为最常见的对称加密算法,对称加密算法也就是加密和解密用相同的密钥,需要的朋友可以参考下
    2023-05-05
  • Java中LambdaQueryWrapper的常用方法详解

    Java中LambdaQueryWrapper的常用方法详解

    这篇文章主要给大家介绍了关于Java中LambdaQueryWrapper常用方法的相关资料,lambdaquerywrapper是一个Java库,用于构建类型安全的Lambda表达式查询,需要的朋友可以参考下
    2023-11-11
  • Java数据类型之细讲char类型与编码关系

    Java数据类型之细讲char类型与编码关系

    这几天一直在复习Java基础知识,特地写了一篇文章来做一下笔记,文中有非常详细的图文示例,对正在学习java的小伙伴们很有帮助,需要的朋友可以参考下
    2021-05-05
  • Java中如何获取当前服务器的IP地址

    Java中如何获取当前服务器的IP地址

    这篇文章主要给大家介绍了关于Java中如何获取当前服务器的IP地址的相关资料,我们可以使用Java中的InetAddress类来获取Linux服务器的IP地址,需要的朋友可以参考下
    2023-07-07
  • 基于Gradle搭建Spring 5.3.13-release源码阅读环境的详细流程

    基于Gradle搭建Spring 5.3.13-release源码阅读环境的详细流程

    这篇文章主要介绍了基于Gradle搭建Spring 5.3.13-release源码阅读环境,首先安装jdk、gradle等一系列必要操作,本文通过实例代码相结合给大家讲解的非常详细,需要的朋友可以参考下
    2022-04-04

最新评论