国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

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

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.

全局配置

這種需求 肯定是全局配置一下了??戳艘幌挛臋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測試一下

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 午夜视频在线观看视频 | 亚洲免费视频网 | 一级一片免费视频 | 日韩在线国产 | 午夜视频在线 | 免费一区二区三区 | 99看片 | 欧美精品99| 成人在线小视频 | 亚洲不卡 | 久久久精品呻吟 | 免费黄色在线观看 | 91免费版在线观看 | 日日操夜夜操天天操 | 欧美不卡 | 国产精品网站在线观看 | 日韩高清一区二区 | 每日更新在线观看av | 成人男女啪啪免费观软件 | 日韩精品区 | 免费的黄网站 | www.天天操.com | 日韩成人免费 | 亚洲午夜视频 | 日本一区二区不卡在线观看 | 日韩在线观看中文字幕 | 中文字幕1区2区3区 日韩免费高清视频 | av电影免费在线观看 | 久久视频一区 | 亚洲一区久久 | 2020国产在线 | 天天久久| 91精品国产乱码久久久久久 | 黄色精品网站 | 国内精品久久久久久久97牛牛 | 国产激情在线看 | 天天插狠狠插 | 国产原创精品视频 | 在线亚洲不卡 | 精品成人佐山爱一区二区 | 午夜视频免费 |