IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> @DateTimeFormat和@JsonFormat注解 -> 正文阅读

[Java知识库]@DateTimeFormat和@JsonFormat注解

一、场景复现
1. 准备实体vo

定义?个pojo,它有?个 java.util.Date 类型的属性 createDate。

package com.sinosoft.business.request;

import lombok.Data;

import java.util.Date;

/**
 * String类型日期接收处理类
 *
 * @Author gblfy
 * @Date 2022-05-26 22:05
 **/
@Data
public class DateReq {
    /**
     * 创建时间
     */
    private Date createDate;
}

2. 定义?个Controller
package com.sinosoft.business.controller;

import com.sinosoft.business.request.DateReq;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

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

/**
 * TODO
 *
 * @Author gblfy
 * @Date 2022-05-26 22:12
 **/
@RestController
@RequestMapping("/date/")
public class DateController {

    @RequestMapping("test")
    public DateReq getDate(DateReq vo){
        System.out.println("date1:"+vo.getCreateDate());
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String date = sdf.format(vo.getCreateDate());
        System.out.println("date2:"+date);
        DateReq vo2 = new DateReq();
        vo2.setCreateDate(new Date());

        return vo2;
    }
}

3. 请求测试

访问 /date/test ,并传?参数:2022-05-26 20:13:21
发现并不能访问成功,会抛出异常:
在这里插入图片描述

分析->因为传?的参数是 String 类型的,??来接收参数的 DateReq 的 date 属性是 java.util.Date 类型的,类型?法转换。

二、?参格式化

这时,就可以使? Spring 的 @DateTimeFormat 注解格式化参数,来解决上述问题。
改造 DateReq:

2.1. 日期转换
@Data
public class DateReq {
    /**
     * 创建时间
     */
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    private Date createDate;
}

2.2. 请求测试

再像上??样访问http://localhost:8080/date/test?createDate=2022-05-26 20:13:21,并传?参数:2022-05-26 20:13:21

在这里插入图片描述

返回参数变成了数字,等会解决

将在控制台上打印:
date1:Thu May 26 20:13:21 CST 2022
date2:2022-05-26 20:13:21
在这里插入图片描述

可以看到,加? @DateTimeFormat 注解后参数可以被接收到了,但?期时间的格式还是需要??再?动转换?下。
因为 @DateTimeFormat 注解的 pattern 属性值指定的?期时间格式并不是将要转换成的?期格式,这个指定的格式是和传?的参数对应
的。
假如注解为:
@DateTimeFormat(pattern=“yyyy/MM/dd HH:mm:ss”)
则传?的参数应该是这样的:
2022/05/26 20:13:21
否则会抛出异常。

三、 出参格式化
3.1. 现象

在上述?例中,调?接?的返回结果为:
“date”: “Thu May 26 20:13:21 CST 2022”

3.2. 改造

这个格式并不是我们想要的,那么如何将其进?格式化?这时就需要?到 jackson 的 @JsonFormat 注解。
改造 DateReq:

@Data
public class DateReq {
    /**
     * 创建时间
     */
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createDate;
}
3.4. 测试验证

继续访问 /date/test ,并传?参数:2022-05-26 20:13:21,可以看到接?返回的结果为:
“date”: “2022-05-26 20:13:21”

3.5. 时间少了8小时

虽然时间格式正确了,但实际上当前时间是 “2022-05-26 12:13:21” ,早了8个?时。因为,jackson在序列化时间时是按照国际标准
时间GMT进?格式化的,?在国内默认时区使?的是CST时区,两者相差8?时。
所以,@JsonFormat 注解还要再加?个属性:

3.6. 解决方案
  • 1 添加注解属性
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createDate;
  • 2 添加时区
    数据库连接添加
&serverTimezone=Asia/Shanghai

这样,结果就正确了。
因为 @JsonFormat 注解不是 Spring ?带的注解,所以使?该注解前需要添加 jackson 相关的依赖包。当然,如果是 SpringBoot 项?
就不需要???动添加依赖了,因为在 spring-boot-start-web 下已经包含了 jackson 相关依赖
在这里插入图片描述

3.7. 效果图

在这里插入图片描述

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-06-03 23:53:36  更:2022-06-03 23:54:52 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 19:40:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码