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));
          }
      }
    

    样例测试效果图:

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