自定义消息转换器
HttpMessageConverters
作用:Http请求/响应与Java对象之间的转换,如下图所示。
- 导包
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
配置:
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());
}
}