extendMessageConverters
在 Spring Boot 中,MessageConverter
是用于将 HTTP 请求和响应的消息体转换为 Java 对象或将 Java 对象转换为 HTTP 消息体的组件。Spring Boot 提供了一些默认的 MessageConverter
实现,如 MappingJackson2HttpMessageConverter
用于 JSON 数据的转换。
扩展 MessageConverter
如果需要自定义或扩展 MessageConverter
,可以通过实现 HttpMessageConverter
接口来创建自己的转换器。然后在 Spring Boot 的配置类中注册这个转换器。
以下是一个示例,演示如何扩展 Spring MVC 框架的消息转换器,以支持自定义的时间格式化:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
@Override protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) { log.info("扩展Spring MVC框架的消息转换器..."); MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(); converter.setObjectMapper(new JacksonObjectMapper()); converters.add(0, converter); }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
|
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"; public static final String DEFAULT_TIME_FORMAT = "HH:mm:ss";
public JacksonObjectMapper() { super(); this.configure(FAIL_ON_UNKNOWN_PROPERTIES, false);
this.getDeserializationConfig().withoutFeatures(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
SimpleModule simpleModule = new SimpleModule() .addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT))) .addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT))) .addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT))) .addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT))) .addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT))) .addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT)));
this.registerModule(simpleModule); } }
|
使用消息转换器和对象映射器的方式可以统一处理时间格式化问题,避免在每个实体类中都添加 @JsonFormat 注解。
这样可以提高代码的可维护性和可读性。
同时,使用 WebMvcConfigurer 还可以对其他请求和响应进行统一处理,例如添加全局异常处理、跨域配置等。