软件编程
位置:首页>> 软件编程>> java编程>> SpringBoot2.0整合jackson配置日期格式化和反序列化的实现

SpringBoot2.0整合jackson配置日期格式化和反序列化的实现

作者:沧海一刀  发布时间:2022-06-29 14:13:52 

标签:SpringBoot2,jackson,日期格式化,反序列化

网上杂七杂八的说法不一,大多数都是抄来抄去,没有实践,近期在项目频繁遇到boot+jackson处理日期的问题,故开此贴。

首先是POM


<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 <modelVersion>4.0.0</modelVersion>

<groupId>io.cj.learning</groupId>
 <artifactId>boot2exam</artifactId>
 <version>0.0.1-SNAPSHOT</version>
 <packaging>jar</packaging>

<name>boot2exam</name>
 <description>Demo project for Spring Boot</description>

<parent>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-parent</artifactId>
   <version>2.0.0.RELEASE</version>
   <relativePath/> <!-- lookup parent from repository -->
 </parent>

<properties>
   <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
   <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
   <java.version>1.8</java.version>
 </properties>

<dependencies>
   <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-data-redis</artifactId>
   </dependency>

<dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-web</artifactId>
   </dependency>

<dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-test</artifactId>
     <scope>test</scope>
   </dependency>
   <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-web</artifactId>
     <version>RELEASE</version>
     <scope>compile</scope>
   </dependency>
   <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-web</artifactId>
     <version>RELEASE</version>
     <scope>compile</scope>
   </dependency>
 </dependencies>

<build>
   <plugins>
     <plugin>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-maven-plugin</artifactId>
     </plugin>
   </plugins>
 </build>

</project>

然后是yml文件

当然yml这东西很多人不喜欢,我也写了个properties版本的)


spring:
 jackson:
   #参数意义:
   #JsonInclude.Include.ALWAYS       默认
   #JsonInclude.Include.NON_DEFAULT   属性为默认值不序列化
   #JsonInclude.Include.NON_EMPTY     属性为 空(””) 或者为 NULL 都不序列化
   #JsonInclude.Include.NON_NULL      属性为NULL  不序列化
   default-property-inclusion: ALWAYS
   time-zone: GMT+8
   date-format: yyyy-MM-dd HH:mm:ss

上面配置对应的properties文件版本:


#jackson相关配置
spring.jackson.date-format = yyyy-MM-dd HH:mm:ss
#时区必须要设置
spring.jackson.time-zone= GMT+8
#ALWAYS的意思是即时属性为null,仍然也会输出这个key
spring.jackson.default-property-inclusion=ALWAYS

然后来定义一个Controller和JAVA Bean

Controller:


package io.cj.learning.boot2exam.controller;

import io.cj.learning.boot2exam.model.DateFormatTest;
import org.springframework.web.bind.annotation.*;

import java.text.SimpleDateFormat;
import java.util.Date;

@RestController
@RequestMapping(value="/test")
public class TestController {

/**
  * 测试时间序列化, java.util.date 类型 -> String
  * @return
  */
 @RequestMapping(value="/dateFormatTest", method = RequestMethod.GET)
 @ResponseBody
  public DateFormatTest dateFormatTest(){
   DateFormatTest dateFormatTest = new DateFormatTest();
   dateFormatTest.setIntProperties(100);
   dateFormatTest.setDateProperties(new Date());
   return dateFormatTest;
 }

/**
  * 测试时间反序列化 String -> java.util.date 类型
  */
 @RequestMapping(value="/dateFormatTest2" ,method = RequestMethod.POST)
 public void dateFormatTest2(@RequestBody DateFormatTest model){
   SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
   System.out.println(model.getIntProperties());
   System.out.println(sdf.format(model.getDateProperties()));
   System.out.println(model.getStrProperties());
 }
}

Java Bean:


package io.cj.learning.boot2exam.model;

import java.util.Date;

/**
* 一个model,里面带一个日期类型
*/
public class DateFormatTest {

private Integer intProperties;
 private Date dateProperties;
 private String strProperties;

public Integer getIntProperties() {
   return intProperties;
 }

public void setIntProperties(Integer intProperties) {
   this.intProperties = intProperties;
 }

public Date getDateProperties() {
   return dateProperties;
 }

public void setDateProperties(Date dateProperties) {
   this.dateProperties = dateProperties;
 }

public String getStrProperties() {
   return strProperties;
 }

public void setStrProperties(String strProperties) {
   this.strProperties = strProperties;
 }
}

启动主类:


package io.cj.learning.boot2exam;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Boot2examApplication {

public static void main(String[] args) {
   SpringApplication.run(Boot2examApplication.class, args);
 }
}

测试:

试一下,首先是日期序列化, 请求一下试试 

SpringBoot2.0整合jackson配置日期格式化和反序列化的实现

然后是反序列化,也请求一个试试:

SpringBoot2.0整合jackson配置日期格式化和反序列化的实现

SpringBoot2.0整合jackson配置日期格式化和反序列化的实现

来源:https://my.oschina.net/u/2338224/blog/2938032

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com