java 时间参数注解@DatetimeFormat和@JsonFormat

博客介绍了Java中@JsonFormat和@DateTimeFormat注解的使用。从数据库获取时间到前端展示时,@JsonFormat可解决后台到前台时间格式一致问题;前台传时间给后台时,@DateTimeFormat能解决格式不一致问题。文中还记录了两个注解的具体使用过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景:从数据库获取时间传到前端进行展示的时候,我们有时候可能无法得到一个满意的时间格式的时间日期,在数据库中显示的是正确的时间格式,获取出来却变成了很丑的时间戳,@JsonFormat注解很好的解决了这个问题,我们通过使用@JsonFormat可以很好的解决:后台到前台时间格式保持一致的问题,其次,另一个问题是,我们在使用WEB服务的时,可能会需要用到,传入时间给后台,比如注册新用户需要填入出生日期等,这个时候前台传递给后台的时间格式同样是不一致的,而我们的与之对应的便有了另一个注解,@DataTimeFormat便很好的解决了这个问题,接下来记录一下具体的@JsonFormat与DateTimeFormat的使用过程。

1.注解@JsonFormat(出参格式化)

1.在你需要查询出来的时间的数据库字段对应的实体类的属性上添加@JsonFormat

import java.util.Date;
 
import com.fasterxml.jackson.annotation.JsonFormat;
 
public class TestClass {
 
    //设置时区为上海时区,时间格式自己据需求定。
    @JsonFormat(pattern="yyyy-MM-dd",timezone = "GMT+8")
    private Date testTime;
 
    
    public Date gettestTime() {
        return testTime;
    }
 
    public void settestTime(Date testTimee) {
        this.testTime= testTime;
    }
}

这里解释一下:@JsonFormat(pattern=“yyyy-MM-dd”,timezone = “GMT+8”)

pattern:是你需要转换的时间日期的格式

timezone:是时间设置为东八区,避免时间在转换中有误差

提示:@JsonFormat注解可以在属性的上方,同样可以在属性对应的get方法上,两种方式没有区别

2.完成上面操作之后,我们用对应的实体类来接收数据库查询出来的结果时就完成了时间格式的转换,再返回给前端时就是一个符合我们设置的时间格式了

2.注解@DateTimeFormat(入参格式化)

1.在controller层我们使用spring mvc 表单自动封装映射对象时,我们在对应的接收前台数据的对象的属性上加@DateTimeFormat

@GetMapping("/test3")
    public void test3(DateTest dateTest) {
        logger.info("日期:{}", dateTest.getDateTest());
    }
public class DateTest {

    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
    private Date dateTest;
    
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
    private Date dateTest2;

    public Date getDateTest() {
        return dateTest;
    }

    public void setDateTest(Date dateTest) {
        this.dateTest = dateTest;
    }

    public Date getDateTest2() {
        return dateTest2;
    }

    public void setDateTest2(Date dateTest2) {
        this.dateTest2 = dateTest2;
    }
}

这里我两个注解都同时使用了,因为我既需要取数据到前台,也需要前台数据传到后台,都需要进行时间格式的转换,可以同时使用

2.在controller层我们用get请求获取单个日期字段时,如果不进行处理则会报400,加上@DateTimeFormat则会解决此问题

@GetMapping("/test2")
    public void test2(@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date date) {
        logger.info("日期:{}", date);
    }

3.在controller层我们用post请求映射对象时,我们需要在对应的接收前台数据对象的属性上加@JsonFormat,这时不能单独使用@DateTimeFormat,否则会报错

@GetMapping("/test4")
    public void test4(@RequestBody DateTest dateTest) {
        logger.info("日期:{}", dateTest.getDateTest2());
    }
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
    private Date dateTest2;
@DateTimeFormat@JsonFormat是两个常用于处理日期时间格式的注解,可以一起使用来实现更灵活的日期时间处理。 @DateTimeFormat注解用于将字符串类型的日期时间转换为对应的 Java 类型,或者将 Java 类型的日期时间转换为字符串类型。它可以应用于字段、方法参数方法返回值上。 @JsonFormat注解用于定义在序列化反序列化过程中如何格式化日期时间。它可以应用于字段、方法类级别上。当应用在类级别上时,会对该类中的所有属性进行统一的日期时间格式化。 当这两个注解一起使用时,可以实现以下效果: 1. 前端传入日期时间字符串时,@DateTimeFormat将其转换为对应的 Java 类型。 2. 后端传出数据时,@JsonFormatJava 类型的日期时间格式化为指定的字符串格式。 3. 后端接收数据时,@DateTimeFormat将传入的字符串类型的日期时间转换为对应的 Java 类型。 4. 前端接收数据时,@JsonFormatJava 类型的日期时间格式化为指定的字符串格式。 示例代码如下: ```java public class Example { @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date datetime; // getter and setter } ``` 以上代码中,`datetime`字段使用了`@DateTimeFormat``@JsonFormat`注解,它们分别指定了日期时间的格式化规则。这样,在前端传入日期时间字符串时,会自动转换为对应的 Java 类型,并在后端传出数据时以指定的格式进行格式化。 希望能解答您的问题,如果还有其他问题,请继续提问。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值