@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);
}
}总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论