当前位置: 代码网 > it编程>编程语言>Java > Spring Boot 中的 @DateTimeFormat 和 @JsonFormat 的用法及作用详解

Spring Boot 中的 @DateTimeFormat 和 @JsonFormat 的用法及作用详解

2024年11月29日 Java 我要评论
在开发 spring boot 应用时,处理日期和时间数据是一个常见的需求。spring boot 提供了两个注解 @datetimeformat 和 @jsonformat 来帮助我们处理这些问题。

        在开发 spring boot 应用时,处理日期和时间数据是一个常见的需求。spring boot 提供了两个注解 @datetimeformat@jsonformat 来帮助我们处理这些问题。这两个注解分别用于将日期字符串解析为日期对象以及将日期对象格式化为字符串。本文将详细介绍这两个注解的用法及作用,并通过实例代码进行说明。

@datetimeformat 注解

@datetimeformat 是一个 spring 框架提供的注解,用于格式化和解析日期时间字段。它主要用于将请求参数或表单数据中的日期字符串解析为 java 的日期对象。

用法

@datetimeformat 可以应用于以下数据类型:

  • java.util.date
  • java.util.calendar
  • java.time.localdate
  • java.time.localdatetime
  • java.time.zoneddatetime

该注解的常用属性包括:

  • pattern:指定日期格式的模式字符串,例如 "yyyy-mm-dd"
  • iso:指定标准的 iso 日期时间格式。可选值为 datetimeformat.iso.datedatetimeformat.iso.timedatetimeformat.iso.date_time

示例

假设我们有一个处理日期的 rest 控制器:

package com.example.demo.controller;
import org.springframework.format.annotation.datetimeformat;
import org.springframework.web.bind.annotation.getmapping;
import org.springframework.web.bind.annotation.requestparam;
import org.springframework.web.bind.annotation.restcontroller;
import java.time.localdate;
import java.time.localdatetime;
import java.time.format.datetimeformatter;
@restcontroller
public class datecontroller {
    @getmapping("/date")
    public string handledate(@requestparam("date") @datetimeformat(pattern = "yyyy-mm-dd") localdate date) {
        return "parsed date: " + date.format(datetimeformatter.iso_date);
    }
    @getmapping("/datetime")
    public string handledatetime(@requestparam("datetime") @datetimeformat(iso = datetimeformat.iso.date_time) localdatetime datetime) {
        return "parsed datetime: " + datetime.format(datetimeformatter.iso_date_time);
    }
}

在上述示例中:

  • /date 端点处理格式为 "yyyy-mm-dd" 的字符串,并将其解析为 localdate 对象。
  • /datetime 端点处理 iso 标准格式的日期时间字符串,并将其解析为 localdatetime 对象。

你可以通过以下 url 测试这些端点:

http://localhost:8080/date?date=2023-10-01
http://localhost:8080/datetime?datetime=2023-10-01t10:15:30

@jsonformat 注解

@jsonformat 是 jackson 库提供的注解,用于序列化和反序列化 json 数据中的日期时间字段。它可以帮助我们将日期时间对象格式化为特定的字符串格式,或将特定格式的字符串解析为日期时间对象。

用法

@jsonformat 可以应用于类的字段或方法上。其常用属性包括:

  • pattern:指定日期时间格式的模式字符串。
  • shape:指定日期时间的格式化类型。常用值为 jsonformat.shape.string
  • timezone:指定时区。

示例

假设我们有一个包含日期时间字段的实体类,并使用 @jsonformat 注解格式化日期时间:

package com.example.demo.model;
import com.fasterxml.jackson.annotation.jsonformat;
import java.time.localdate;
import java.time.localdatetime;
public class event {
    private string name;
    @jsonformat(pattern = "yyyy-mm-dd")
    private localdate date;
    @jsonformat(pattern = "yyyy-mm-dd hh:mm:ss", timezone = "utc")
    private localdatetime datetime;
    // getters and setters
    public string getname() {
        return name;
    }
    public void setname(string name) {
        this.name = name;
    }
    public localdate getdate() {
        return date;
    }
    public void setdate(localdate date) {
        this.date = date;
    }
    public localdatetime getdatetime() {
        return datetime;
    }
    public void setdatetime(localdatetime datetime) {
        this.datetime = datetime;
    }
}

接着,我们创建一个 rest 控制器来测试该实体类的序列化和反序列化:

package com.example.demo.controller;
import com.example.demo.model.event;
import org.springframework.web.bind.annotation.*;
import java.time.localdate;
import java.time.localdatetime;
@restcontroller
public class eventcontroller {
    @getmapping("/event")
    public event getevent() {
        event event = new event();
        event.setname("spring boot workshop");
        event.setdate(localdate.of(2023, 10, 1));
        event.setdatetime(localdatetime.of(2023, 10, 1, 10, 15, 30));
        return event;
    }
    @postmapping("/event")
    public string createevent(@requestbody event event) {
        // 持久化逻辑...
        return "event created: " + event.getname();
    }
}

在上述示例中:

  • /event get 端点返回一个 event 对象,其中日期和日期时间字段将根据 @jsonformat 注解指定的格式序列化为 json 字符串。
  • /event post 端点接受一个 json 请求体,并将其反序列化为 event 对象。

你可以通过以下方式测试这些端点:

get 请求

curl -x get http://localhost:8080/event

返回结果:

{
    "name": "spring boot workshop",
    "date": "2023-10-01",
    "datetime": "2023-10-01 10:15:30"
}

post 请求

curl -x post http://localhost:8080/event -h "content-type: application/json" -d '{
    "name": "spring boot workshop",
    "date": "2023-10-01",
    "datetime": "2023-10-01 10:15:30"
}'

返回结果:

event created: spring boot workshop

小结

        在本文中,我们详细介绍了 spring boot 中的 @datetimeformat@jsonformat 注解的用法及作用。@datetimeformat 主要用于将请求参数或表单数据中的日期字符串解析为日期对象,而 @jsonformat 则用于序列化和反序列化 json 数据中的日期时间字段。

        通过这些注解,我们可以更方便地处理日期和时间数据,确保数据在不同层次间传递时的格式一致性。这对于开发高质量的 spring boot 应用至关重要

到此这篇关于spring boot 中的 @datetimeformat 和 @jsonformat 的用法及作用的文章就介绍到这了,更多相关spring boot @datetimeformat 和 @jsonformat内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com