对于SpringBoot中时间格式化的五种方法汇总,我们可以采取如下方式进行讲解:
SpringBoot中时间格式化的五种方法汇总
方法一:使用注解@DateTimeFormat
我们可以在实体类中给日期类型的属性添加@DateTimeFormat
注解,参数为指定的日期格式,SpringBoot会根据注解中的格式配置将字符串类型的日期转换成Date类型。示例代码如下:
@Data
public class User {
private String name;
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
}
方法二:使用注解@JsonFormat
如果我们在开发中使用SpringBoot开发Restful API的话,我们可以使用注解@JsonFormat
实现日期格式化。示例代码如下:
@RestController
public class UserController {
@GetMapping("/user/{id}")
public User getUser(@PathVariable("id") Long id) {
User user = new User();
user.setName("test");
user.setCreateTime(new Date());
return user;
}
}
@Data
public class User {
private String name;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
}
方法三:使用全局日期格式化器
我们可以在SpringBoot的配置文件中定义全局日期格式化器,这样我们在实体类中的日期属性就不用添加注解了。示例代码如下:
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addFormatters(FormatterRegistry registry) {
registry.addFormatter(new DateFormatter("yyyy-MM-dd"));
}
}
@Data
public class User {
private String name;
private Date createTime;
}
方法四:使用@JsonSerialize
注解
我们可以在实体类的日期属性上使用@JsonSerialize
注解,指定日期格式化器。示例代码如下:
@Data
public class User {
private String name;
@JsonSerialize(using = CustomDateSerializer.class)
private Date createTime;
}
public class CustomDateSerializer extends JsonSerializer<Date> {
private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@Override
public void serialize(Date date, JsonGenerator jsonGenerator, SerializerProvider serializers) throws IOException, JsonProcessingException {
String formattedDate = dateFormat.format(date);
jsonGenerator.writeString(formattedDate);
}
}
方法五:使用自定义注解
我们可以自己定义注解并使用AOP的方式进行日期格式化。示例代码如下:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface DateFormat {
String pattern() default "yyyy-MM-dd HH:mm:ss";
}
@Aspect
@Component
public class DateFormatAspect {
@Around("@annotation(com.example.demo.DateFormat) && args(obj,..)")
public Object format(ProceedingJoinPoint point, Object obj) throws Throwable {
Field[] fields = obj.getClass().getDeclaredFields();
for (Field field : fields) {
if (field.isAnnotationPresent(DateFormat.class)) {
field.setAccessible(true);
Object value = field.get(obj);
if (value instanceof Date) {
SimpleDateFormat sdf = new SimpleDateFormat(field.getAnnotation(DateFormat.class).pattern());
String formattedDate = sdf.format((Date) value);
field.set(obj, formattedDate);
}
}
}
return point.proceed(new Object[]{obj});
}
}
@Data
public class User {
private String name;
@DateFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
}
以上就是SpringBoot中时间格式化的五种方法汇总的详细讲解。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot中时间格式化的五种方法汇总 - Python技术站