springboot引入fastjson解析枚举类型
前言
fastjson是目前开源平台上最快的json解析库之一,且由国内大厂alibaba开源。国内大部分项目和很多程序员喜欢使用fastjson作为json解析库。
版本
这边列出有涉及到的库的版本
springboot.version = 2.5.4
fastjson.version = 1.2.78
hutool.version = 5.7.13
正文
fastjson替换jackson
springboot自带的json解析库为jackson,如果要引入fastjson替代原始的jackson一般做法是构建一个配置类实现WebMvcConfigurer接口,并重写void configureMessageConverters(List<HttpMessageConverter<?>> converters)方法。 基本逻辑是定义一个 FastJsonHttpMessageConverter 对象,并插入到springmvc的Converters列表中的首位。
代码如下
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
//自定义配置...
List<MediaType> mediaTypes = new ArrayList<>();
mediaTypes.add(MediaType.APPLICATION_JSON);
converter.setSupportedMediaTypes(mediaTypes);
//获取fastjson全局序列化、反序列化配置
SerializeConfig serializeConfig = SerializeConfig.getGlobalInstance();
ParserConfig parserConfig = ParserConfig.getGlobalInstance();
//以下几种类型解析时解析为string,避免精度丢失
serializeConfig.put(BigInteger.class, ToStringSerializer.instance);
serializeConfig.put(Long.class, ToStringSerializer.instance);
serializeConfig.put(BigDecimal.class, ToStringSerializer.instance);
//配置生效
FastJsonConfig config = converter.getFastJsonConfig();
config.setSerializeConfig(serializeConfig);
config.setParserConfig(parserConfig);
/*将fastjson设置为序号为0的json解析器,同时要在pom中的spring-boot-starter-web依赖添加exclusion
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-json</artifactId>
</exclusion>
</exclusions>
</dependency>
*/
converters.add(0, converter);
}
}
fastjson解析枚举类型
一个示例的枚举类 Code.class