@JsonFormat 和 @DateTimeFormat 时间格式化注解(场景示例代码)

@JsonFormat和@DateTimeFormat是两个常用的时间格式化注解。

@JsonFormat注解

@JsonFormat是一个Jackson库提供的注解,用于对Date类型的属性进行格式化,将Date类型格式化为指定的格式的字符串,或者将String类型的值反序列化为Date类型。

使用@JsonFormat注解可以将Date类型的属性格式化为指定的格式的字符串:

public class User {
    private Long id;
    private String name;
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date birthday;
    // getter和setter方法省略
}

在上面的代码中,birthday属性上添加了@JsonFormat注解,其中pattern属性指定了格式化的格式,timezone属性指定了时区。如果不指定时区,默认使用jvm的时区。当使用JSON序列化User对象时,birthday属性将以指定格式的字符串输出。

{
  "id": 1001,
  "name": "Alice",
  "birthday": "2022-07-04"
}

@DateTimeFormat注解

@DateTimeFormat注解是Spring框架中的一个注解,用于将请求参数或者Spring MVC中的ModelAttribute类型的字段进行格式化,将字符串格式的日期转为Java中的Date类型。

下面是一个使用@DateTimeFormat注解的示例代码:

@Controller
@RequestMapping("/user")
public class UserController {
    @GetMapping("/{id}")
    public String getUser(@PathVariable Long id, @ModelAttribute("form") UserForm form) {
        User user = userService.getUserById(id);
        BeanUtils.copyProperties(user, form);
        return "user";
    }
}

public class UserForm {
    private Long id;
    @NotBlank(message = "用户名不能为空")
    private String name;
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date birthday;
    // getter和setter方法省略
}

在上面的代码中,UserForm类的birthday属性上添加了@DateTimeFormat注解,pattern属性指定了日期的格式。当Spring MVC接收一个提交的表单时,表单中的日期类型的字段将会自动被转为Date类型。

注:在使用@DateTimeFormat注解时,需要在配置文件中指定全局的日期格式化器。

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addFormatters(FormatterRegistry registry) {
        registry.addFormatter(new DateFormatter("yyyy-MM-dd"));
    }
}

这样配置后,系统中所有使用了@DateTimeFormat注解的日期类型的字段都会生效,无需每一个字段都添加注解。

示例代码

以下是使用两个注解的例子。

@Controller
@RequestMapping("/user")
public class UserController {
    @PostMapping
    public ResponseEntity<Void> createUser(@RequestBody User user) {
        userService.addUser(user);
        return ResponseEntity.status(HttpStatus.CREATED).build();
    }
}

public class User {
    private Long id;
    @NotBlank(message = "用户名不能为空")
    private String name;
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date birthday;
    // getter和setter方法省略
}

在上面的代码中,date类型的属性birthday上同时添加了@JsonFormat注解和@DateTimeFormat注解。在请求中提交的日期格式为yyyy-MM-dd,使用@DateTimeFormat注解将请求中的日期格式化为Date类型;在响应中,使用@JsonFormat注解将日期格式化为yyyy-MM-dd的字符串类型。

这样,在请求中提交的日期和响应中返回的日期,都会使用相同的格式,而且接收到的日期也会自动转换为Date类型。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:@JsonFormat 和 @DateTimeFormat 时间格式化注解(场景示例代码) - Python技术站

(0)
上一篇 2023年6月1日
下一篇 2023年6月1日

相关文章

  • java8 计算时间差的方法示例

    Java8 计算时间差的方法示例 计算时间差在很多应用场景中都非常常见,比如计算两个时间点之间的时间差、计算函数或方法的执行时间等等。本文将介绍在 Java8 中计算时间差的方法及示例,通过使用 Java8 提供的 DateTime API,可以轻松地对时间进行计算和格式化。 1. 使用 Duration 类计算时间差 Duration 类是 Java8 中…

    Java 2023年5月20日
    00
  • SpringBoot创建maven多模块项目实战代码

    下面是创建Spring Boot Maven多模块项目的完整攻略。 1. 创建Maven父级项目 首先,我们需要创建一个Maven父级项目,它将作为我们多模块项目的容器。使用以下命令创建一个空项目: $ mvn archetype:generate -DgroupId=com.example -DartifactId=parent -DarchetypeAr…

    Java 2023年5月19日
    00
  • 关于Kafka消费者订阅方式

    下面我来为您详细讲解关于Kafka消费者订阅方式的完整攻略。 Kafka消费者订阅方式 在 Kafka 中,消费者可以通过不同的方式从主题(Topic)中获取消息,以下是三种常见的订阅方式: 1. 静态订阅方式 使用静态方式订阅主题的消费者需要在代码中显式指定要消费的主题和分区。消费者只能消费指定分区中的消息,无法动态的分配和重新分配分区。 以 Java 客…

    Java 2023年5月20日
    00
  • JAVA十大排序算法之希尔排序详解

    JAVA十大排序算法之希尔排序详解 什么是希尔排序? 希尔排序,也称为“缩小增量排序”,是插入排序的一种又称“缩小增量排序”(Diminishing Increment Sort)。希尔排序将数组所有元素划分为若干个区域,然后分别对每一个区域使用直接插入排序算法进行排序。随着排序的进行,它会不断缩小区域的范围,直到整个数组被作为一个区域处理。 希尔排序的优点…

    Java 2023年5月19日
    00
  • Java工具jsch.jar实现上传下载

    下面是关于Java工具jsch.jar实现上传下载的完整攻略。 1.简介 JSch是一个java实现SSH2协议的开源库。JSch允许在java程序中进行ssh连接的操作,可以实现远程执行命令、上传文件、下载文件等操作。 2.引入jsch.jar 首先我们需要在项目中引入jsch.jar。如果使用maven管理项目,在pom.xml文件中加入以下依赖: &l…

    Java 2023年5月19日
    00
  • java8中Stream的使用以及分割list案例

    Java 8中添加了Stream API,提供了一种新的操作集合和数组的方式,它使得我们可以更加便捷地进行集合和数组的处理操作,同时也可以编写更为可读性高和简洁的代码。以下是Java 8中Stream的使用以及分割List的攻略。 Stream的使用 基本概念 Stream是Java 8中提供的一种数据流的方式,它是一种高效、强大和易用的API。它通过函数式…

    Java 2023年5月26日
    00
  • Java编程ssh整合常见错误解析

    Java编程SSH整合常见错误解析 SSH(Struts2+Spring3+Hibernate3)是目前Java企业级Web应用开发中比较流行的一种技术架构,尤其是在传统JSP+Servlet的基础上,尤其是对于Java初学者来说,它的学习曲线相对来说比较平滑。然而在SSH的整合过程中,由于各种原因,很容易出现各种错误,本文将一一进行详细介绍。 错误一:Cl…

    Java 2023年5月20日
    00
  • HTTP协议详解_动力节点Java学院整理

    HTTP协议详解_动力节点Java学院整理 一、HTTP协议的基础知识 1.1 HTTP协议的定义 HTTP(Hypertext Transfer Protocol)是一种用于传输超媒体文档(例如HTML)的应用层协议。它是Web的基础协议,也是一种请求-响应协议,常用于客户端和服务器之间的通讯。 1.2 HTTP请求的基本格式 HTTP请求由三个部分组成,…

    Java 2023年6月15日
    00
合作推广
合作推广
分享本页
返回顶部