从零搭建自己的SpringBoot后台框架(四)

释放双眼,带上耳机,听听看~!

一:消息转换器能干什么?

不知道大家有没有遇到过这种情况:后台接口返回一个实例,当你需要使用某个属性的值时,你还要判断一下值是否为null;接口返回一堆属性值为null的属性等

ok,消息转换器可以帮你解决这个问题

二:添加fastjson依赖

打开pom.xml,找到<dependencies></dependencies>标签,在标签中添加fastjson依赖


1
2
3
4
5
6
1&lt;dependency&gt;
2   &lt;groupId&gt;com.alibaba&lt;/groupId&gt;
3   &lt;artifactId&gt;fastjson&lt;/artifactId&gt;
4   &lt;version&gt;1.2.22&lt;/version&gt;
5&lt;/dependency&gt;
6

然后鼠标右键选择Maven→Reimport进行依赖下载

三:创建配置文件

在文件夹configurer中创建WebConfigurer


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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
1package com.example.demo.core.configurer;
2
3import com.alibaba.fastjson.serializer.SerializerFeature;
4import com.alibaba.fastjson.support.config.FastJsonConfig;
5import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter4;
6import org.springframework.context.annotation.Configuration;
7import org.springframework.http.MediaType;
8import org.springframework.http.converter.HttpMessageConverter;
9import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
10
11import java.nio.charset.Charset;
12import java.util.ArrayList;
13import java.util.List;
14
15/**
16 * @author phubing
17 * @Description:
18 * @time 2019/4/19 10:42
19 */
20@Configuration
21public class WebConfigurer extends WebMvcConfigurationSupport {
22
23    /**
24     * 修改自定义消息转换器
25     * @param converters
26     */
27    @Override
28    public void configureMessageConverters(List&lt;HttpMessageConverter&lt;?&gt;&gt; converters) {
29        FastJsonHttpMessageConverter4 converter = new FastJsonHttpMessageConverter4();
30        converter.setSupportedMediaTypes(getSupportedMediaTypes());
31        FastJsonConfig config = new FastJsonConfig();
32        config.setSerializerFeatures(
33            // String null -&gt; &quot;&quot;
34            SerializerFeature.WriteNullStringAsEmpty,
35            // Number null -&gt; 0
36            SerializerFeature.WriteNullNumberAsZero,
37            //禁止循环引用
38            SerializerFeature.DisableCircularReferenceDetect
39        );
40        converter.setFastJsonConfig(config);
41        converter.setDefaultCharset(Charset.forName(&quot;UTF-8&quot;));
42        converters.add(converter);
43    }
44
45    private List&lt;MediaType&gt; getSupportedMediaTypes() {
46        List&lt;MediaType&gt; supportedMediaTypes = new ArrayList&lt;&gt;();
47        supportedMediaTypes.add(MediaType.APPLICATION_JSON);
48        supportedMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
49        supportedMediaTypes.add(MediaType.APPLICATION_ATOM_XML);
50        supportedMediaTypes.add(MediaType.APPLICATION_FORM_URLENCODED);
51        supportedMediaTypes.add(MediaType.APPLICATION_OCTET_STREAM);
52        supportedMediaTypes.add(MediaType.APPLICATION_PDF);
53        supportedMediaTypes.add(MediaType.APPLICATION_RSS_XML);
54        supportedMediaTypes.add(MediaType.APPLICATION_XHTML_XML);
55        supportedMediaTypes.add(MediaType.APPLICATION_XML);
56        supportedMediaTypes.add(MediaType.IMAGE_GIF);
57        supportedMediaTypes.add(MediaType.IMAGE_JPEG);
58        supportedMediaTypes.add(MediaType.IMAGE_PNG);
59        supportedMediaTypes.add(MediaType.TEXT_EVENT_STREAM);
60        supportedMediaTypes.add(MediaType.TEXT_HTML);
61        supportedMediaTypes.add(MediaType.TEXT_MARKDOWN);
62        supportedMediaTypes.add(MediaType.TEXT_PLAIN);
63        supportedMediaTypes.add(MediaType.TEXT_XML);
64        return supportedMediaTypes;
65    }
66}
67

其中


1
2
1config.setSerializerFeatures()
2

方法中可以添加多个配置,以下列举出几个常用配置,更多配置请自行百度


1
2
3
4
5
6
1WriteNullListAsEmpty  :List字段如果为null,输出为[],而非null
2WriteNullStringAsEmpty : 字符类型字段如果为null,输出为&quot;&quot;,而非null
3DisableCircularReferenceDetect :消除对同一对象循环引用的问题,默认为false(如果不配置有可能会进入死循环)
4WriteNullBooleanAsFalse:Boolean字段如果为null,输出为false,而非null
5WriteMapNullValue:是否输出值为null的字段,默认为false复制代码
6

四:数据库中添加测试数据


1
2
3
1INSERT INTO `user_info` VALUES (&#x27;1&#x27;, &#x27;1&#x27;);
2INSERT INTO `user_info` VALUES (&#x27;2&#x27;, null);复制代码
3

五:测试

查询条件id为2

未配置转换器时,查询结果为


1
2
3
4
5
6
7
8
9
1{
2    &quot;code&quot;: 200,
3    &quot;msg&quot;: &quot;success&quot;,
4    &quot;data&quot;: {
5        &quot;id&quot;: 2,
6        &quot;userName&quot;: null
7    }
8}
9

配置转换器之后,查询结果为


1
2
3
4
5
6
7
8
9
1{
2    &quot;code&quot;: 200,
3    &quot;data&quot;: {
4        &quot;id&quot;: 2,
5        &quot;userName&quot;: &quot;&quot;   //这里已经变为&quot;&quot;,而不是null
6    },
7    &quot;msg&quot;: &quot;success&quot;
8}
9

 

给TA打赏
共{{data.count}}人
人已打赏
安全技术

C/C++内存泄漏及检测

2022-1-11 12:36:11

安全经验

macOS 再曝重大安全漏洞,或许已存在 15 年

2018-1-2 11:12:22

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索