环境准备
1. 创建项目,添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
2. 创建实体类UserDTO
这里使用了lombok的@Data注解生成get,set方法。
@Data
public class UserDTO {
private Date createTime;
}
3.创建controller层
@RestController
public class UserController {
@GetMapping("/getUser")
public List<UserDTO> getUser() {
List<UserDTO> userList = new ArrayList<UserDTO>();
for (int i=1; i<=3; i++) {
UserDTO user = new UserDTO();
user.setCreateTime(new Date());
user.setUsername("gongj" + i);
user.setId("j" + i);
userList.add(user);
}
return userList;
}
}
4. 测试效果
显然我们是不想要这种格式,不利于阅读。所以我们需要进行时间格式化,并更改时区。
第一种 注解方式
在需要进行时间格式化的字段上加上@JsonFormat注解,该注解属于jackson,SringBoot底层已经默认集成了Jackson。
@Data
public class UserDTO {
private String id;
private String username;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
private Date createTime;
}
使用该注解缺点是:项目可能有大量的时间字段,就需要在每个字段加上该注解,很麻烦。
第二种 修改默认配置
方法1. 重写MappingJackson2HttpMessageConverter
新建类,通过@Configuration将该类设置为配置类,
重写MappingJackson2HttpMessageConverter类。
@Bean
public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter(){
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
ObjectMapper om = new ObjectMapper();
//全局修改json时间格式
om.setDateFormat(new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"));
converter.setObjectMapper(om);
return converter;
}
方法2. 重写ObjectMapper
新建类,设置为配置类,重写ObjectMapper
@Bean
ObjectMapper objectMapper() {
ObjectMapper om = new ObjectMapper();
om.setDateFormat(new SimpleDateFormat("yyyy-MM-dd"));
return om;
}
上述两种方法都是全局修改
第三种 配置文件(yml,properties)
1. yml配置方式
spring: jackson: date-format: yyyy/MM/dd timezone: GMT+8
2. properties配置方法
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=GMT+8
- 如果第二种方式和第三种方式配置同时存在,以第三种方式为主。
- 如果三种方式都存在的时候,以实体类中注解格式为主。