【教程】fastjson升級,spring boot設定fastjson2做序列化反序列化
阿新 • • 發佈:2022-05-25
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); } }