一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - springboot jackson配置教程

springboot jackson配置教程

2022-02-15 15:56知我飯否 Java教程

這篇文章主要介紹了springboot jackson配置教程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

springboot jackson配置

項目中使用的json是jackson。這個呢是spring boot自帶的,一開始是用阿里的fastjson的。但是 總是有漏洞。還是用jackson,谷歌的gson也感覺非常棒。

需求

在controller 使用@RestController 返回json。使用的是 jackson。在處理BigDecimal的時候,想去掉 小數點后面的 00,例如 280.00.

全局配置

這種需求 肯定是全局配置一下了。看了一下文檔,配置一下,感覺還可以 寫一下吧。

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測試一下

springboot jackson配置教程

可以看見 280.00 被轉成了 280。 好了,研究我的深度學習去了

 

springboot配置jackSon處理字段

常用框架:阿里,fastjson,谷歌,gson等。

javaBean序列化為json

① 性能:Jackson > Fastjson > Gson > Json-lib同個結構

② Jackson、Fastjson、Gson 類庫各有特點,各有自己的專長

③ 空間換時間,時間換空間

jackson處理相關自動

① 指定字段不返回:@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;

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持服務器之家。

原文鏈接:https://blog.csdn.net/a1064072510/article/details/108726631

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 日韩欧美一区二区不卡 | 国产一区二区精品 | 校花的第一次好紧好爽 | 国产亚洲成归v人片在线观看 | 视频高h| 亚洲国产欧美在线人成aaa | 日本高清免费看 | 青青草综合网 | 欧美视频在线一区 | 特黄视频 | 精品久久久久中文字幕日本 | 亚洲性久久久影院 | 国产精品久久久久久久久久久威 | 国产欧美日韩不卡 | 91国语自产拍在线观看 | 胖女性大bbbbbb| 国产精品成人免费 | 亚洲国产精品无圣光一区二区 | 亚洲AV人无码综合在线观看蜜桃 | 亚洲精品国产在线观看 | 免费特黄视频 | 我的绝色岳每雯雯 | girlfriend动漫在线播放 | 午夜在线观看免费完整直播网页 | 人妖欧美一区二区三区四区 | 大学生情侣在线 | 亚洲福利天堂网福利在线观看 | 深夜在线观看网站 | 国产一级在线观看 | 国产在线视频色综合 | 99r视频| 99久久国产综合精品女小说 | 久久热r在线视频精品 | 国产精品一区二区三区久久 | 精品国产乱码久久久久久人妻 | 我把寡妇日出水好爽 | 动漫jk美女被爆羞羞漫画 | 国产微拍精品一区 | 国产精品亚洲综合第一区 | 男人与禽交的方法 | 亚洲视频精选 |