SpringBoot中统一/单独处理日期格式(Http请求返回JSON格式数据中的日期格式)

原理

  • 默认情况: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”} 中的createTimeyyyy-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 boot默认使用jackson格式化输出数据,故只需要修改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 {
	// 自定义Spring容器中HttpMessageConverters对象,并行相关配置
    @Bean
    public HttpMessageConverters fastJsonHttpMessageConverter() {
        FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
        // 设置FastJsonHttpMessageConverter支持的MediaType
        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 // 配置返回值中null值时,不允许删除key
        );
        converter.setFastJsonConfig(config);
        
        // 将FastJsonHttpMessageConverter添加到HttpMessageConverters中
        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;
}

测试

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
SpringBoot通过使用统一数据返回格式可以提高开发效率和代码的可维护性。返回统一JSON数据格式可以统一前后端之间的数据交互方式,减少沟通成本,并且提高了代码的可读性和可维护性。 在SpringBoot,可以定义一个全局异常处理器(GlobalExceptionHandler),用于捕获和处理全局的异常。在异常处理,可以定义一个统一数据返回格式,包括状态码、提示信息和返回数据。当发生异常时,异常处理器会将异常信息封装成统一JSON数据格式返回给前端,以便前端进行处理。 为了实现统一数据返回格式,可以定义一个响应对象(ResponseObject),包含对应的状态码、提示信息和返回数据。在业务逻辑处理统一使用ResponseObject来封装返回数据,然后再返回给前端。 在控制器层,可以使用ResponseEntity对象来返回统一JSON数据格式。通过使用ResponseEntity.ok()方法可以返回一个状态码为200的成功响应,然后将ResponseObject对象作为响应的数据。这样,无论是成功还是失败,都能以统一JSON数据格式返回给前端。 在返回数据时,可以添加一些通用的字段,如请求ID、访问时间等,以便用于日志记录和跟踪。 通过采用统一JSON数据返回格式,可以提高代码的可读性、可维护性和规范性,方便前后端的协作和沟通。同时,也可以方便后期的维护和扩展,减少了代码的冗余和重复编写。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值