Spring Boot jackson配置使用詳解

Spring Boot系列-json框架jackson配置詳解

  • T1 - 前言

    目前Java最常見的3中JSON操作框架分別爲Gson、Jackson、FastJson,該篇文章主要講解jackson在SpringBoot環境中各配置項的具體作用。

  • T2 - 環境依賴

    jackson是spring-boot的web/webflux框架默認依賴的json庫,要使用SpringBoot的jackson自動化配置只需保證SpringBoot的web/webflux依賴引入。下文配置demo爲了方便調試引入了個人的swagger配置框架:

    <dependencies>
        <dependency>
               <groupId>org.springframework.boot</groupId>
               <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- swagger自動配置依賴,爲方便測試 -->
        <dependency>
               <groupId>io.github.wilson-he</groupId>
               <artifactId>swagger2-spring-boot-starter</artifactId>
        </dependency>
    </dependencies>
    
  • T3 - application.yml樣例講解

      spring:
        jackson:
          # 設置屬性命名策略,對應jackson下PropertyNamingStrategy中的常量值,SNAKE_CASE-返回的json駝峯式轉下劃線,json body下劃線傳到後端自動轉駝峯式
          property-naming-strategy: SNAKE_CASE
          # 全局設置@JsonFormat的格式pattern
          date-format: yyyy-MM-dd HH:mm:ss
          # 當地時區
          locale: zh
          # 設置全局時區
          time-zone: GMT+8
          # 常用,全局設置pojo或被@JsonInclude註解的屬性的序列化方式
          default-property-inclusion: NON_NULL #不爲空的屬性纔會序列化,具體屬性可看JsonInclude.Include
          # 常規默認,枚舉類SerializationFeature中的枚舉屬性爲key,值爲boolean設置jackson序列化特性,具體key請看SerializationFeature源碼
          serialization:
            WRITE_DATES_AS_TIMESTAMPS: true # 返回的java.util.date轉換成timestamp
            FAIL_ON_EMPTY_BEANS: true # 對象爲空時是否報錯,默認true
          # 枚舉類DeserializationFeature中的枚舉屬性爲key,值爲boolean設置jackson反序列化特性,具體key請看DeserializationFeature源碼
          deserialization:
            # 常用,json中含pojo不存在屬性時是否失敗報錯,默認true
            FAIL_ON_UNKNOWN_PROPERTIES: false
          # 枚舉類MapperFeature中的枚舉屬性爲key,值爲boolean設置jackson ObjectMapper特性
          # ObjectMapper在jackson中負責json的讀寫、json與pojo的互轉、json tree的互轉,具體特性請看MapperFeature,常規默認即可
          mapper:
            # 使用getter取代setter探測屬性,如類中含getName()但不包含name屬性與setName(),傳輸的vo json格式模板中依舊含name屬性
            USE_GETTERS_AS_SETTERS: true #默認false
          # 枚舉類JsonParser.Feature枚舉類中的枚舉屬性爲key,值爲boolean設置jackson JsonParser特性
          # JsonParser在jackson中負責json內容的讀取,具體特性請看JsonParser.Feature,一般無需設置默認即可
          parser:
            ALLOW_SINGLE_QUOTES: true # 是否允許出現單引號,默認false
          # 枚舉類JsonGenerator.Feature枚舉類中的枚舉屬性爲key,值爲boolean設置jackson JsonGenerator特性,一般無需設置默認即可
          # JsonGenerator在jackson中負責編寫json內容,具體特性請看JsonGenerator.Feature
      swagger:
        enabled: true
        docket:
          base-package: io.github
    
  • T4 - 測試樣例

    application.yml

      spring:
        jackson:
          # 常用請求與響應自動轉下劃線,空值字段不傳輸
          property-naming-strategy: SNAKE_CASE
          default-property-inclusion: non_null
      swagger:
        docket:
          base-package: io.github.jackson
        enabled: true
    

    CompanyVO.java

      /**
       * CompanyVO
       *
       * @author Wilson
       * @date 2019/4/21
       */
      @Data
      @Accessors(chain = true)
      public class CompanyVO {
          private String companyName;
          @JsonFormat
          private Date createTime;
          private Integer employeeNum;
      }
    

    CompanyController.java

      @RestController
      @RequestMapping("/company")
      @Api
      public class CompanyController {
          @Resource
          private ObjectMapper objectMapper;
      
          @PostMapping("/")
          public CompanyVO post(@RequestBody CompanyVO vo) {
              return vo;
          }
      
          @GetMapping("/")
          public String objectToJson() throws JsonProcessingException {
              // 使用jackson的objectMapper將對象根據SNAKE_CASE策略轉成json字符串
              return objectMapper.writeValueAsString(new CompanyVO().setCompanyName("company").setEmployeeNum(11));
          }
      }
    

    樣例測試效果圖:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章