springboot自定义消息转换器HttpMessageConverter

springboot自定义消息转换器HttpMessageConverter

SpringMVC中有两个注解可以进行http响应报文(response)和请求报文(requst),分别为@ResponseBody和@RequestBody。然而,大家遇到过这种情况吗?返回前端一个实体类,但只用其中几个属性,其他一大堆属性全部为null。
这个时候就需要消息转换器啦!
在这里插入图片描述
一般springboot会有默认的消息管理器,StringHttpMessageConverter(字符串转换器),FastJsonHttpMessageConverter ,MappingJackson2HttpMessageConverter等等。

今天我要说的是如何自定义消息管理器-FastJsonHttpMessageConverter

1.引用fastjson依赖

<dependency>
   <groupId>com.alibaba</groupId>
   <artifactId>fastjson</artifactId>
   <version>1.2.58</version>
</dependency>

2. 创建配置文件JsonHttpMessageConfiguration.java

/**
 *  json序列化配置类
 */
@Configuration
public class JsonHttpMessageConfiguration{
    /**
     *  配置全局序列化的时候为null的属性也序列化
     */
    @Bean
    @ConditionalOnMissingBean(FastJsonHttpMessageConverter.class)
    public FastJsonHttpMessageConverter fastJsonHttpMessageConverter() {
        //1.需要定义一个convert转换消息的对象
        FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
        //2.添加fastJson的配置信息;
        FastJsonConfig config = new FastJsonConfig();
        //添加配置-config.setSerializerFeatures()  方法中可以添加多个配置(以,分开)
        config.setSerializerFeatures(SerializerFeature.WriteMapNullValue,SerializerFeature.DisableCircularReferenceDetect);
        //3.在convert中添加配置信息.
        // 配置全局支持的媒体类型
        converter.setSupportedMediaTypes(getSupportedMediaTypes());
        converter.setFastJsonConfig(config);
        return converter;
    }
    /**
     *  配置全局支持的媒体类型
     */
    private List<MediaType> getSupportedMediaTypes() {
        List<MediaType> supportedMediaTypes = new ArrayList<>();
        supportedMediaTypes.add(MediaType.APPLICATION_JSON);
        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);
        return supportedMediaTypes;
    }
}

以上就配置成功啦!

以下列举SerializerFeature配置的属性解释

属性名称解释
QuoteFieldNames输出key时是否使用双引号,默认为true
UseSingleQuotes使用单引号而不是双引号,默认为false
WriteMapNullValue是否输出值为null的字段,默认为false应用场景:前端必须需要所有字段
UseISO8601DateFormatDate使用ISO8601格式输出,默认为false
WriteNullListAsEmptyList字段如果为null,输出为[],而不是null
WriteNullStringAsEmpty字符类型字段如果为null,输出为"",而不是null
WriteNullNumberAsZero数值字段如果为null,输出为0,而非null
WriteNullBooleanAsFalseBoolean字段如果为null,输出为false,而非null
SkipTransientField如果是true,类中的Get方法对应的Field是transient,序列化时将会被忽略。默认为true
SortField按字段名称排序后输出。默认为false
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值