简介
当使用 RequestBody 接收Json类型参数时,LocalDateTime序列化需要单独在字段配置。另外,接口返回的对象包含Date、LocalDateTime,也需要在字段配置@JsonFormat。
因此,最好的方式是全局配置,让开发人员无感地像普通参数那样使用,这是最方便的。
实现
下面这个方法可以直接用,处理了Date、LocalDate、LocalDateTime三大类型
@Configuration
public class JasonConf {
@Bean
@ConditionalOnMissingBean(ObjectMapper.class)
public ObjectMapper getObjectMapper() {
ObjectMapper objectMapper = new ObjectMapper();
//Date类型序列化
TimeZone timeZone = TimeZone.getTimeZone("Asia/Shanghai");
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DatePattern.NORM_DATETIME_PATTERN);
simpleDateFormat.setTimeZone(timeZone);
objectMapper.setDateFormat(simpleDateFormat);
//LocalDate、LocalDateTime序列化
JavaTimeModule javaTimeModule = new JavaTimeModule();
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN);
javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(dateTimeFormatter));
javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(dateTimeFormatter));
objectMapper.registerModule(javaTimeModule);
return objectMapper;
}
}
测试
定义个User实体类:
@Data
public class User {
private String name;
private Date createdOn;
private LocalDate birth;
private LocalDateTime modifiedOn;
}
写个接口测试:
@RequestMapping("/add.json")
@ResponseBody
public User add(@RequestBody User user){
user.setCreatedOn(new Date());
return user;
}
使用Postman进行测试,结果符合要求