原理
- 默认情况:SpringBoot中,默认使用
Jackson
进行格式化返回数据(将返回数据格式化为JSON字符串),故设置Jackson
格式化时对日期的处理格式即可。 - fastJson:当使用fastJson作为Http请求返回数据格式化时,需要单独对fastJson进行配置
特别说明
- 由于设置 Jackson 或 fastJson 作为Http请求数据格式化类,故:
不论是返回数据中的日期格式化
,还是将请求入参中的String类型的yyyy-MM-dd HH:mm:ss
转为java.util.Date
类型,都会使用配置的日期格式。比如:
- 当请求参数 {“createTime”:“2001-02-21 13:05:21”} 中的
createTime
为yyyy-MM-dd HH:mm:ss
格式,故可以通过配置Jackson
的时间格式,将其转化为java.util.Date
类型 - 当返回值中 private Date createTime 的 createTime为
java.util.Date
类型,故可以通过配置Jackson
的时间格式,将其转为yyyy-MM-dd HH:mm:ss
格式的字符串
- 简单来说:配置后,可以很方便的在
java.util.Date
与时间字符串
之间进行自动转换
统一处理
默认情况
- 由于默认情况下,使用
Jackson
格式化数据,故只需要进行简单配置即可,如下:
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=GMT+8
fastJson作为HttpMessageConverters时
package gk.springboot.preheat.config;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.support.config.FastJsonConfig;
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import java.nio.charset.Charset;
import java.util.Arrays;
import java.util.List;
@Configuration
public class HttpMessageConverterConfig {
@Bean
public HttpMessageConverters fastJsonHttpMessageConverter() {
FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
converter.setSupportedMediaTypes(Arrays.asList(MediaType.APPLICATION_JSON));
FastJsonConfig config = new FastJsonConfig();
config.setDateFormat("yyyy-MM-dd HH:mm:ss");
config.setCharset(Charset.forName("UTF-8"));
config.setSerializerFeatures(
SerializerFeature.WriteMapNullValue
);
converter.setFastJsonConfig(config);
HttpMessageConverters messageConverters = new HttpMessageConverters(converter);
List<HttpMessageConverter<?>> converters = messageConverters.getConverters();
System.out.println("包含的消息转换器 => " + converters);
return messageConverters;
}
}
单独处理
默认情况
- 即:使用Jackson进行JSON格式化时
- 直接使用
@JsonFormat
注解,进行单独处理 @JsonFormat
注解优先级要高于全局
配置
package gk.springboot.preheat.model;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
import java.util.List;
@Data
public class UserInfo {
private Integer id;
private String name;
private Integer age;
private Character sex;
@JsonFormat(pattern = "yy-M-d HH:mm:ss", locale = "GMT+8")
private Date createTime = new Date();
private Date updateTime = new Date();
private List<Account> account;
}
fastJson作为HttpMessageConverters时
- 使用fastJson提供的注解
@JSONField
进行单独配置 - 同样,
@JSONField
注解优先级高于全局
配置
package gk.springboot.preheat.model;
import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;
import java.util.Date;
import java.util.List;
@Data
public class UserInfo {
private Integer id;
private String name;
private Integer age;
private Character sex;
@JSONField(format = "yy-M-d HH:mm:ss")
private Date createTime = new Date();
private Date updateTime = new Date();
private List<Account> account;
}
测试
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/3694061e724982645508099c3d2a8e49.png)