← 返回首页
SpringBoot基础教程(八)
发表时间:2020-10-20 22:26:06
SpringBoot使用fastjson.

Fastjson是阿里巴巴的开源JSON解析库,那么 jackson 和 fastJson 有哪些区别呢?根据网上公开的资料比较得到下表。

如果想让SpringBoot默认使用FastJson,我们首先添加fastjson依赖:


    <properties>
       <!--fastjson 1.2.68以下版本存在反序列化远程命令执行漏洞--> 
       <fastjson.version>1.2.68</fastjson.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>${fastjson.version}</version>
        </dependency>
    </dependencies>

在config包下,添加配置类。

package com.oracle.config;

import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.support.config.FastJsonConfig;
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;

/**
 * 设置config类 使用 @Bean注入 fastJsonHttpMessageConvert
 */
@Configuration
public class MassageConverConfiguration {

    @Bean
    public HttpMessageConverters fastJsonHttpMessageConverters() {
        // 1、需要先定义一个 convert 转换消息的对象;
        FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
        // 2、添加fastJson 的配置信息,比如:是否要格式化返回的json数据;
        FastJsonConfig fastJsonConfig = new FastJsonConfig();
        fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat);
        //防止中文乱码问题
        List<MediaType> supportedMediaTypes=new ArrayList<MediaType>();
        supportedMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
        fastConverter.setSupportedMediaTypes(supportedMediaTypes);
        // 3、在convert中添加配置信息.
        fastConverter.setFastJsonConfig(fastJsonConfig);
        HttpMessageConverter<?> converter = fastConverter;
        return new HttpMessageConverters(converter);
    }
}

测试Controller返回json.

    //测试返回map
    @RequestMapping("map")

    public Map<String,Object> returnMap(){
        Map<String,Object> map = new HashMap<String,Object>();
        map.put("data",new Users(100,"zhangsan","123456"));
        map.put("msg","作者信息");
        map.put("code",200);
        return map;

    }

返回结果如下:

测试属性值为null的情况。

    //测试返回map
    @RequestMapping("map")

    public Map<String,Object> returnMap(){
        Map<String,Object> map = new HashMap<String,Object>();
        map.put("data",null);
        map.put("msg","作者信息");
        map.put("code",200);
        return map;

    }

返回结果如下:

可以发现使用fastJson时,对null的处理和jackson有些不同。

总结: 不论是FastJson还是Jackson,我们在开发中,一般都会将FastJson/Jackson进行封装成工具类JSONUtil使用。