《SpringBoot2.X心法总纲》 (本篇博客已于2019-08-28优化更新) 缘由:jdk7的日期类是java.util.date,java.util.Calendar是非线程安全,所
《SpringBoot2.X心法总纲》
(本篇博客已于2019-08-28优化更新)
缘由:jdk7的日期类是java.util.date,java.util.Calendar是非线程安全,所以jdk8提供了一个java.time包,用LocalDateTime、LocalDate代替Date,因此不分公司会用到jdk8新功能,自然就会有人不再使用Date,而是LocalDateTime。
1、pom依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId></dependency><dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional></dependency>
2、全局变量配置格式化
@Configurationpublic class LocalDateConfig { @Value("${spring.jackson.date-format:yyyy-MM-dd HH:mm:ss}") private String pattern; @Bean public LocalDateTimeSerializer localDateTimeDeserializer() { return new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(pattern)); } @Bean public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() { return builder -> builder.serializerByType(LocalDateTime.class, localDateTimeDeserializer()); }}
3、实体类
@Datapublic class Student { private LocalDateTime schoolTime;}
4、直接测试
@RestControllerpublic class TestController { @GetMapping(value ="/test1") public Student test1(){ LocalDateTime date = LocalDateTime.now(); Student student = new Student(); student.setSchoolTime(LocalDateTime.now()); return student; }}
5、测试结果
测试接口:localhost:8080/test1
{"schoolTime":"2018-10-08 17:29:57"}
6、局部变量
上面是一种全局变量设置,如果我们只是局部变量的格式化的话,那么把配置类删除,然后在Student的那个字段加一个注解就可以了,如下:
@Datapublic class Student { @JsonFormat(pattern = "yyyy-MM-dd HH") private LocalDateTime schoolTime;}
7、测试结果
8、总结
我们并没有删除配置类,但是结果的格式是按照实体类中注解走的,因为实体类的是局部变量,局部变量的优先级高于全局变量!
时隔一年重新更新优化博客,感概万千,嘻嘻。