@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技术站