1. 程式人生 > 其它 >【教程】fastjson升級,spring boot設定fastjson2做序列化反序列化

【教程】fastjson升級,spring boot設定fastjson2做序列化反序列化

FastJsonHttpMessageConverter



一、簡介

專案地址

為什麼要升級? 官方給出的對比

fastjson2可以說是一次重構,程式碼結構不同。fastjson2更快,更安全(沒信心說)



二、如何升級?

2.1 替換maven和包名

如果程式碼中沒有過多的直接使用FastJson的類,直接替換maven和.java檔案中的包名即可

建議大家不要直接使用Json類,而是自己封裝一個json類,這樣當出現問題時,也好改,避免每次都去修改大量的檔案



2.2 修改SpringBoot MessageConverters

spring boot預設的訊息轉換中,json的序列化和反序列化是jackson

如果你在fastjson 1配置了訊息轉換,升級到fastjson2,你需要引入fastjson2-extension,並且FastJsonHttpMessageConverter的包名為

com.alibaba.fastjson2.support.spring.http.converter.FastJsonHttpMessageConverter

完整的配置檔案(博主當前是spring boot 2.6.7)

<!-- pom.xml -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <!-- 去掉Jackson依賴,用fastjson -->
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-json</artifactId>
                </exclusion>
            </exclusions>
        </dependency>


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

        <dependency>
            <groupId>com.alibaba.fastjson2</groupId>
            <artifactId>fastjson2-extension</artifactId>
            <version>${fastjson2.version}</version>
        </dependency>
// 和fastjson 1一樣,只是包路徑變了
// import com.alibaba.fastjson2.support.spring.http.converter.FastJsonHttpMessageConverter;

@Configuration
public class JsonMessageConverterConfigurer implements WebMvcConfigurer {
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
        // 自定義配置...
        // FastJsonConfig config = new FastJsonConfig();
        // config.set...
        // converter.setFastJsonConfig(config);

        // spring boot高版本無需配置,低版本不配置報錯:Content-Type cannot contain wildcard type '*'
        List<MediaType> fastMediaTypes = new ArrayList<>();
        fastMediaTypes.add(MediaType.APPLICATION_JSON);
        fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
        converter.setSupportedMediaTypes(fastMediaTypes);

        converters.add(0,converter);
    }
}