1.书写一个java对象和http请求转换的转换器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/*对象映射器: 基于Jackson的对象映射器, 用于将Java对象转换为JSON字符串, 或将JSON字符串转换为Java对象.*/
public class JacksonObjectMapper extends ObjectMapper {
//定义时间常量
public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";
public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
public static final String DEFAULT_TIME_FORMAT = "HH:mm:ss";

public JacksonObjectMapper(){ //本类的无参构造方法
super(); //调用父类 ObjectMapper 的无参构造方法,确保父类的初始化逻辑被执行。
SimpleModule simpleModule=new SimpleModule()//是 Jackson 库中用于注册自定义序列化器和反序列化器的核心代码。
//时间反序列化器
.addDeserializer(LocalDateTime.class,new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT))) //对LocalDateTime时间类型反序列化
.addDeserializer(LocalDate.class,new LocalDateDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT)))//对LocalDate时间类型反序列化
.addDeserializer(LocalTime.class,new LocalTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT)))//对LocalTime时间类型反序列化
//时间序列化器
.addSerializer(LocalDateTime.class,new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT)))//对LocalDateTime时间类型序列化
.addSerializer(LocalDate.class,new LocalDateSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT)))//对LocalDate时间类型序列化
.addSerializer(LocalTime.class,new LocalTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT)));//对LocalTime时间类型序列化

//注册到jacksonobjectmapper
this.registerModule(simpleModule);//调用父类的registerModule()方法,注册模块
}

2.在配置文件中注册这个转换器

1
2
3
4
5
protected void extendMessageConverters(List<HttpMessageConverter<?>> converters){//http消息转换器的集合
MappingJackson2HttpMessageConverter convert=new MappingJackson2HttpMessageConverter(); //new 一个Json和http消息转换的转换器
convert.setObjectMapper(new JacksonObjectMapper()); //给转换器设置对应的mapper
converters.add(0,convert); //0,表示将转换器插入到第一个位置,使得它优先于默认的消息转换器;
}

extendMessageConverters是WebMvcConfigurationSupport类的方法,不要把名字写错类,不然不会被spring框架扫描到;