当前位置: 代码网 > it编程>编程语言>Java > @JsonSerialize序列化注解的使用

@JsonSerialize序列化注解的使用

2024年09月11日 Java 我要评论
@jsonserialize序列化注解json 是数据交换的通用格式@jsonserialize注解是jackson 库中的一部分,用于定义在将 java 对象序列化为 json 格式时,如何进行定制

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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com