一、非Json格式
当参数没有被@RequestBody注释的皆为非Json格式。
1、后端接收
方法一
只需在时间参数前面加上@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
方法二
也可以全局配置:实现Converter接口的convert方法并注入容器中。
@Configuration
public class ConvertConfig {
@Bean
public Converter<String, LocalDateTime> LocalDateTimeConvert() {
return new Converter<String, LocalDateTime>() {
@Override
public LocalDateTime convert(String source) {
return LocalDateTime.parse(source, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
}
};
}
@Bean
public Converter<String, LocalDate> LocalDateConvert() {
return new Converter<String, LocalDate>() {
@Override
public LocalDate convert(String source) {
return LocalDate.parse(source, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
}
};
}
@Bean
public Converter<String, LocalTime> LocalTimeTimeConvert() {
return new Converter<String, LocalTime>() {
@Override
public LocalTime convert(String source) {
return LocalTime.parse(source, DateTimeFormatter.ofPattern("HH:mm:ss"));
}
};
}}
二、Json格式
当前端传递的参数为Json格式时,需要使用@RequestBody接收,这个Json格式的数据SpringBoot是默认使用Jackson来处理,所以我们只需要配置Jackson的解析和生成规则即可。
Jackson默认序列化和反序列化的格式为yyyy-MM-dd'T'HH:mm:ss
,例如2001-08-12T06:13:14
,可以通过如下方法修改默认格式。
方法一:
在实体类时间字段上添加@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
注解,这样Jackson的解析和生成规则都会改成指定格式。
方法二:
全局配置:将下述序列化和反序列化器添加到容器中。
// 序列化
@Bean
public LocalDateTimeSerializer localDateTimeSerializer() {
return new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
}
@Bean
public LocalDateSerializer localDateSerializer() {
return new LocalDateSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
}
@Bean
public LocalTimeSerializer localTimeSerializer() {
return new LocalTimeSerializer(DateTimeFormatter.ofPattern("HH:mm:ss"));
}
// 反序列化
@Bean
public LocalDateTimeDeserializer localDateTimeDeserializer(){
return new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
}
@Bean
public LocalDateDeserializer localDateDeserializer() {
return new LocalDateDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
}
@Bean
public LocalTimeDeserializer localTimeDeserializer() {
return new LocalTimeDeserializer(DateTimeFormatter.ofPattern("HH:mm:ss"));
}
@Bean
public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {
return builder -> builder.serializerByType(LocalDateTime.class, localDateTimeSerializer())
.serializerByType(LocalDate.class, localDateSerializer())
.serializerByType(LocalTime.class, localTimeSerializer())
.deserializerByType(LocalDateTime.class,localDateTimeDeserializer())
.deserializerByType(LocalDate.class,localDateDeserializer())
.deserializerByType(LocalTime.class,localTimeDeserializer());
}