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