@JsonSerialize序列化注解的使用
@JsonSerialize序列化注解
JSON 是數(shù)據(jù)交換的通用格式
@JsonSerialize注解是Jackson 庫中的一部分,用于定義在將 Java 對象序列化為 JSON 格式時,如何進行定制化處理的方式。
Jackson 是一個流行的 Java 庫,用于處理 JSON 數(shù)據(jù)的序列化和反序列化??梢栽谧侄?、方法或者類級上自定義序列化類。有using 屬性,允許指定一個自定義的序列化器(Serializer)類,來決定如何將 Java 對象轉(zhuǎn)換為 JSON 數(shù)據(jù)。
用來自定義需要轉(zhuǎn)換為JSON數(shù)據(jù),可以用在類上,自定義對這個類的JSON處理,也可以用在字段上自定義對字段的處理,例如日期格式、小數(shù)點保留幾位,是否準(zhǔn)換為1或0
先創(chuàng)建一個類
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 { //使用方法,直接加載需要保留小數(shù)的字段上 @JsonSerialize(using = Customer1DoubleSerialize.class) private Double num; @ApiModelProperty("id") private String Id; @ApiModelProperty("名") private String name; @ApiModelProperty("數(shù)據(jù)類型") @ExcelProperty(converter = UnitConverter.class) private String dataType; }
小數(shù)點保留一位數(shù)
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()); } } }
小數(shù)點保留2位數(shù)(保留三位同理定義三位小數(shù)即可)
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導(dǎo)出的時候——拼接單位
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); } }
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
劍指Offer之Java算法習(xí)題精講鏈表與數(shù)組專項訓(xùn)練
跟著思路走,之后從簡單題入手,反復(fù)去看,做過之后可能會忘記,之后再做一次,記不住就反復(fù)做,反復(fù)尋求思路和規(guī)律,慢慢積累就會發(fā)現(xiàn)質(zhì)的變化2022-03-03Java中的CyclicBarrier循環(huán)柵欄深入解析
這篇文章主要介紹了Java中的CyclicBarrier循環(huán)柵欄深入解析,CycleBarrier 它就相當(dāng)于是一個柵欄,所有線程在到達柵欄后都需要等待其他線程,等所有線程都到達后,再一起通過,需要的朋友可以參考下2023-12-12基于OpenID?Connect及Token?Relay實現(xiàn)Spring?Cloud?Gateway
這篇文章主要介紹了基于OpenID?Connect及Token?Relay實現(xiàn)Spring?Cloud?Gateway,Spring?Cloud?Gateway旨在提供一種簡單而有效的方式來路由到API,并為API提供跨領(lǐng)域的關(guān)注點,如:安全性、監(jiān)控/指標(biāo)和彈性2022-06-06解析Java的InputStream類并借助其讀取ppt文件
這篇文章主要介紹了Java的InputStream類并借助其讀取ppt文件,講到了InputStream類中一些常用的方法的問題,需要的朋友可以參考下2015-11-11