這篇文章主要介紹springboot中如何配置jackson,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
項目中使用的json是jackson。這個呢是spring boot自帶的,一開始是用阿里的fastjson的。但是 總是有漏洞。還是用jackson,谷歌的gson也感覺非常棒。
在controller 使用@RestController 返回json。使用的是 jackson。在處理BigDecimal的時候,想去掉 小數點后面的 00,例如 280.00.
這種需求 肯定是全局配置一下了??戳艘幌挛臋n,配置一下,感覺還可以 寫一下吧。
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.json.JsonReadFeature;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.json.JsonMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import java.io.IOException;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
/**
* @Author: plani
* 創建時間: 2020/9/22 9:41
*/
@Configuration
public class JacksonConfig {
@Bean
@Primary
@ConditionalOnMissingBean(ObjectMapper.class)
public ObjectMapper jacksonObjectMapper()
{
JsonMapper.Builder builder = JsonMapper.builder();
// 通過該方法對mapper對象進行設置,所有序列化的對象都將按改規則進行系列化
// Include.Include.ALWAYS 默認
// Include.NON_DEFAULT 屬性為默認值不序列化
// Include.NON_EMPTY 屬性為 空("") 或者為 NULL 都不序列化,則返回的json是沒有這個字段的。這樣對移動端會更省流量
// Include.NON_NULL 屬性為NULL 不序列化
builder.serializationInclusion(JsonInclude.Include.NON_EMPTY);
//有未知屬性 要不要拋異常
builder.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
//是否允許JSON字符串包含未轉義的控制字符(值小于32的ASCII字符,包括制表符和換行符)的特性。如果feature設置為false,則在遇到這樣的字符時拋出異常。
builder.configure(JsonReadFeature.ALLOW_UNESCAPED_CONTROL_CHARS, true);
//確定解析器是否允許使用單引號(撇號,字符'\ ")引用字符串(名稱和字符串值)的特性。如果是,這是除了其他可接受的標記。但不是JSON規范)。
builder.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true);
JsonMapper jsonMapper = builder.build();
JavaTimeModule javaTimeModule = new JavaTimeModule();
//添加 序列器 這里是對 BigDecimal 類型處理,這是關鍵代碼
javaTimeModule.addSerializer(BigDecimal.class, new JsonSerializer<BigDecimal>() {
@Override
public void serialize(BigDecimal value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
DecimalFormat fnum = new DecimalFormat("#.##");
//把 這個BigDecimal 屬性對應的值,寫成 String 類型
gen.writeString(fnum.format(value));
}
});
//處理 時間格式
javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
//注冊
jsonMapper.registerModule(javaTimeModule);
return jsonMapper;
}
}上面最重要的 就是 addSerializer 這個方法,用來處理對應類型的 轉化。注釋的很清楚,看不懂的可以留言問我。
網上有好多上面是ObjectMapper 這個進行設置,這個呢里面有不少是 標記過時的。 所以 我用了JsonMapper
寫一個 controller 方法,返回含有BigDecimal的類,來測試一下
@PostMapping("test")
public Map test() {
Map<String, Object> map = new HashMap<>();
BigDecimal bigDecimal = new BigDecimal("280.00");
map.put("one", bigDecimal);
return map;
}用postman測試一下

可以看見 280.00 被轉成了 280。 好了,研究我的深度學習去了
常用框架:阿里,fastjson,谷歌,gson等。
① 性能:Jackson > Fastjson > Gson > Json-lib同個結構
② Jackson、Fastjson、Gson 類庫各有特點,各有自己的專長
③ 空間換時間,時間換空間
① 指定字段不返回:@jsonIgnore(主要用于密碼,讓密碼不顯示,加在字段上面)
② 指定日期格式:@JsonFormat(pattern = “yyyy-MM-dd hh:mm:ss”,locale = “zh”,timezone = “GMT+8”)
③ 空字段不返回:@JsonInclude(JsonInclude.Include.NON_NULL)
③ 指定別名:@JsonProperty(“create_time”)
開發功能:視頻創建時候返回自定義格式,過濾用戶敏感信息。
private int price;
@JsonProperty("cover_img")
private String coverImg;
@JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss",locale = "zh",timezone = "GMT+8")
@JsonProperty("create_time")
private Date createTime;
@JsonInclude(JsonInclude.Include.NON_NULL)
private List<Chapter> chapterList;以上是“springboot中如何配置jackson”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。