自定義訊息轉換器
阿新 • • 發佈:2021-12-09
HttpMessageConverters
作用:Http請求/響應與Java物件之間的轉換,如下圖所示。
配置:
package com.zl.securitytest.config; import com.alibaba.fastjson.serializer.SerializerFeature; import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.EnableAspectJAutoProxy; import org.springframework.http.MediaType; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.List; /** * 自定義訊息轉換器 * * @author zhang * @date 2021-12-09 16:03 */ @Configuration @EnableAspectJAutoProxy public class CustomWebMvcConfigurer implements WebMvcConfigurer { /** * FastJsonHttpMessageConverter 訊息轉換器 * * @return */ @Bean public FastJsonHttpMessageConverter fastJsonHttpMessageConverter() { // 建立 FastJson 訊息轉換器 FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter(); /** * List欄位如果為null,輸出為[],而非null * SerializerFeature.WriteNullListAsEmpty, * 字元型別欄位如果為null,輸出為"",而非null * SerializerFeature.WriteNullStringAsEmpty, * Boolean欄位如果為null,輸出為falseJ,而非null * SerializerFeature.WriteNullBooleanAsFalse, * 消除對同一物件迴圈引用的問題,預設為false(如果不配置有可能會進入死迴圈) * SerializerFeature.DisableCircularReferenceDetect, * 是否輸出值為null的欄位,預設為false。 * SerializerFeature.WriteMapNullValue */ fastJsonHttpMessageConverter.setFeatures(SerializerFeature.DisableCircularReferenceDetect, SerializerFeature.WriteMapNullValue); List<MediaType> supportedMediaTypes = new ArrayList(); // 處理訪問型別 supportedMediaTypes.add(MediaType.APPLICATION_JSON); supportedMediaTypes.add(MediaType.APPLICATION_JSON_UTF8); supportedMediaTypes.add(MediaType.APPLICATION_ATOM_XML); supportedMediaTypes.add(MediaType.APPLICATION_FORM_URLENCODED); supportedMediaTypes.add(MediaType.APPLICATION_OCTET_STREAM); supportedMediaTypes.add(MediaType.APPLICATION_PDF); supportedMediaTypes.add(MediaType.APPLICATION_RSS_XML); supportedMediaTypes.add(MediaType.APPLICATION_XHTML_XML); supportedMediaTypes.add(MediaType.APPLICATION_XML); supportedMediaTypes.add(MediaType.IMAGE_GIF); supportedMediaTypes.add(MediaType.IMAGE_JPEG); supportedMediaTypes.add(MediaType.IMAGE_PNG); supportedMediaTypes.add(MediaType.TEXT_EVENT_STREAM); supportedMediaTypes.add(MediaType.TEXT_HTML); supportedMediaTypes.add(MediaType.TEXT_MARKDOWN); supportedMediaTypes.add(MediaType.TEXT_PLAIN); supportedMediaTypes.add(MediaType.TEXT_XML); fastJsonHttpMessageConverter.setSupportedMediaTypes(supportedMediaTypes); return fastJsonHttpMessageConverter; } @Override public void extendMessageConverters(List<HttpMessageConverter<?>> converters) { // springboot 預設的訊息轉換器 MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(); ObjectMapper objectMapper = converter.getObjectMapper(); // 轉換實體類中新增的欄位不報錯 objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); // 轉換時間格式化 objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")); converter.setObjectMapper(objectMapper); //新增轉換器 converters.add(0, converter); converters.add(fastJsonHttpMessageConverter()); } }