Springboot替换默认jackSon为fastJson过程

因为工作原因,需要将jackJson替换为fastJson。
先说过程Springboot2.0以前的写法:

第一种:通过在启动类中实现WebMvcConfigurerAdapter 并重写ConfigureMessageConverters方法

第一步: pom.xml 中引用fastjson

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.45</version>
</dependency>

第二步: 启动类中配置

@SpringBootApplication  //申明让spring boot自动给程序进行必要的配置
public class AppStart extends WebMvcConfigurerAdapter {

    public static void main(String[] args) {
        SpringApplication.run(AppStart.class, args);
    }

    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        super.configureMessageConverters(converters);
        FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
        FastJsonConfig fastJsonCo
<think>好的,我现在需要解决用户的问题:在Spring Boot中修改了domain后,使用Fastjson时出现报错。首先,我得分析可能的原因。 用户提到修改了domain后出现错误,所以首先想到的是序列化/反序列化的问题。Fastjson在处理对象时,依赖getter和setter方法,或者字段名称。如果用户修改了domain类的字段名、类型,或者删除了某些方法,可能导致Fastjson无法正确解析。 比如,假设用户将一个字段从userName改为username,而JSON中仍然使用userName,这时候如果没有正确的注解或者配置,Fastjson会找不到对应的字段,从而抛出异常。或者,如果用户添加了新字段但没有提供默认构造函数,Fastjson在反序列化时可能无法实例化对象。 另外,可能涉及到循环引用的问题。比如domain对象之间存在双向关联,比如User和Order互相引用,Fastjson默认配置可能无法处理,导致栈溢出或者序列化失败。这时候需要配置Fastjson的序列化特性,如SerializerFeature.DisableCircularReferenceDetect。 还可能是因为版本升级带来的问题。如果用户升级了Spring Boot或者Fastjson的版本,某些API可能发生了变化,导致兼容性问题。需要检查版本是否兼容,是否有破坏性变更。 另外,Spring Boot默认使用Jackson,如果用户切换到了Fastjson但没有正确配置,比如未注册Fastjson的HttpMessageConverter,可能导致序列化失败。这时候需要检查配置类是否添加了Fastjson的转换器。 解决方法方面,首先应该检查domain类的改动,确认字段名、方法是否与JSON结构匹配。可以使用@JSONField注解来指定字段别名。其次,检查Fastjson的配置,确保正确配置了序列化特性,比如关闭循环引用检测。然后,确认Spring Boot中是否正确集成了Fastjson的转换器,替换默认Jackson。 可能的示例代码包括在配置类中添加Fastjson的转换器,或者在domain字段上添加注解。此外,处理循环引用可能需要配置Fastjson的全局实例,设置相关特性。 最后,用户可能需要了解如何避免此类问题,比如使用注解明确指定字段名,统一序列化配置,或者进行充分的测试。</think>当Spring Boot项目中修改domain对象后出现Fastjson报错,通常与序列化/反序列化规则变化有关。以下是常见原因及解决方案: 一、常见原因分析: 1. 字段不匹配(最常见): - 删除/重命名字段但未更新@JSONField注解 - 修改字段类型导致类型转换失败 - 新增非空字段但未提供默认值 2. 循环引用问题: - 新增双向关联导致序列化时无限递归 3. 配置不一致: - Fastjson全局配置未适配新的domain结构 - 未正确配置Spring消息转换器 二、解决方案示例: 1. 基础字段映射修正: ```java public class User { // 旧字段:@JSONField(name = "userName") // 新字段: @JSONField(name = "username") // 确保与JSON字段名一致 private String username; // 新增字段需处理默认值 @JSONField(deserializeUsing = MyDefaultValueDeserializer.class) private Integer userType = 0; } ``` 2. 配置HttpMessageConverter: ```java @Configuration public class WebConfig implements WebMvcConfigurer { @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter(); FastJsonConfig config = new FastJsonConfig(); config.setSerializerFeatures( SerializerFeature.DisableCircularReferenceDetect, SerializerFeature.WriteMapNullValue ); converter.setFastJsonConfig(config); converters.add(0, converter); } } ``` 3. 处理循环引用: ```java // 在配置类中设置全局参数 FastJsonConfig config = new FastJsonConfig(); config.setSerializerFeatures(SerializerFeature.DisableCircularReferenceDetect); // 或在特定字段使用注解 public class Order { @JSONField(serialize = false) private User owner; } ``` 三、调试建议: 1. 检查序列化结果: ```java String json = JSON.toJSONString(yourObject, SerializerFeature.PrettyFormat); System.out.println(json); ``` 2. 启用Fastjson的类型推导: ```java ParserConfig.getGlobalInstance().setAutoTypeSupport(true); ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值