@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日

相关文章

  • Java通过导出超大Excel文件解决内存溢出问题

    当处理超大规模的Excel文件时,Java很容易发生内存溢出的问题。这时候,最好的解决方案之一是通过导出Excel文件来减小内存使用量。以下是详细的攻略: 1. 使用Apache POI库 Apache POI是一个Java库,它提供了对许多Microsoft Office格式文件(如Excel、Word和PowerPoint)的读取和写入能力。在处理超大规…

    Java 2023年5月19日
    00
  • springboot项目出现”java: 错误: 无效的源发行版:17“问题解决方案

    下面是报错页面 问题解析 在我个人遇到此问题的情况下,出现此错误的原因是springboot的版本与java版本不一致 在spring3更新后,idea在创建springboot项目时会默认选择spring3,哪怕你选择的是java8的版本idea默认选择spring3 在你以java8创建spring3的项目后,就一定会出现”java: 错误: 无效的源发…

    Java 2023年4月30日
    00
  • java.lang.OutOfMemoryError 错误整理及解决办法

    java.lang.OutOfMemoryError 错误整理及解决办法 1. 什么是 java.lang.OutOfMemoryError 错误 java.lang.OutOfMemoryError 错误通常是由于 JVM 在无法分配足够的内存或使用过多的内存资源时抛出的错误。它是一种运行时错误,表示 JVM 运行时无法为对象分配足够的内存。 2. 可能的…

    Java 2023年5月27日
    00
  • jsp request.getParameter() 和request.getAttribute()方法区别详解

    JSP中的request对象是用于客户端到服务器的HTTP请求中传递参数、数据和请求头等信息的。request对象提供了多个方法来获取参数和属性值,其中包括getParameter()和getAttribute()方法。虽然这两个方法都能获取到客户端传输的参数或属性值,但是它们在具体的使用方式上是有所不同的。下面就来详细讲解一下它们的区别。 1. getPa…

    Java 2023年6月15日
    00
  • Json操作库DynamicJson使用指南

    Json操作库DynamicJson使用指南 1. 介绍 DynamicJson是一个Json操作库,它可以轻松快速地处理Json数据。它的主要特点包括:- 支持动态类型- 支持Linq查询语句- 简单易用 2. 安装 可以使用NuGet轻松安装DynamicJson。在Visual Studio中,在项目中右键点击“管理NuGet程序包”,搜索Dynami…

    Java 2023年5月19日
    00
  • Java中的PrintWriter 介绍_动力节点Java学院整理

    Java中的PrintWriter是一种方便输出文本内容到文件或控制台的工具。下面我们将详细介绍PrintWriter的使用方法。 PrintWriter的构造函数 PrintWriter的构造函数可以接受多种参数,如下所示: PrintWriter(File file):使用指定的文件创建PrintWriter对象。 PrintWriter(OutputS…

    Java 2023年5月26日
    00
  • Java对文本文件MD5加密并ftp传送到远程主机目录的实现方法

    这里提供一种Java对文本文件MD5加密并ftp传送到远程主机目录的实现方法,共分为以下几个步骤: 步骤一:导入必要的依赖库 Java的MD5加密算法和FTP传输需要用到两个依赖库:commons-codec和commons-net。所以,需要在Java项目中导入相应的依赖库,示例代码如下: <dependency> <groupId&gt…

    Java 2023年5月23日
    00
  • Java常用类库StringBuffer,Runtime,日期操作类等类库总结

    Java 常用类库总结 Java 提供了丰富的类库,覆盖了各种功能,特别是在字符串处理、日期操作、进程管理等方面提供了大量的支持。本篇将详细讲解其中的三个类库:StringBuffer、Runtime 和日期操作类。 StringBuffer 类 StringBuffer 类是在处理字符串时常用的类,相对于 String 类,它可以在原有字符串的基础上直接进…

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