Disable SerializationFeature.FAIL_ON_EMPTY_BEANS

SpringBoot 专栏收录该内容
58 篇文章 5 订阅

SpringBoot2.X整合JPA/Hibernate过程中出现的问题,如下所示:

No serializer found for class org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer 
and no properties discovered to create BeanSerializer 
(to avoid exception, disable SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS) 

问题背景为使用jackjson将对象json化的时候出现的错误。


解决办法一

在实体类上面加上注解:

@JsonIgnoreProperties(value = {"handler","hibernateLazyInitializer","fieldHandler"})

这里写图片描述


解决办法二

注册一个objectMapper覆盖掉默认的,这样就不用在每个类上面使用@JsonIgnoreProperties

@Bean
public ObjectMapper objectMapper() {
     return new ObjectMapper().disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
}

// ObjectMapper为com.fasterxml.jackson.databind.ObjectMapper;

测试结果如下:

这里写图片描述

对比解决方法一,在解析单个对象时返回的json中多了两个字段handler和hibernateLazyInitializer。


解决方法三

不使用SpringBoot默认的jackson进行对象json化,手动使用其他json框架如fastJSON进行json化然后返回。

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

解决方法四

参考博文:Jackson注册Hibernate4Module模块

不过我未测试成功。


解决方法五

类似于解决方法二也是在配置类里面注册bean,不同的是这次替换的不是objectMapper,而是Jackson2ObjectMapperBuilderCustomizer。

实例代码如下(注意解决方法二也是在配置类里面):

@Configuration
public class MyConfig {

    @Bean
    Jackson2ObjectMapperBuilderCustomizer  jackson2ObjectMapperBuilderCustomizer(){
        return new Jackson2ObjectMapperBuilderCustomizer() {
            @Override
            public void customize(Jackson2ObjectMapperBuilder jacksonObjectMapperBuilder) {
                jacksonObjectMapperBuilder.featuresToDisable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
            }
        };
    }
}

该种办法是看到一楼评论小伙伴说的,我就给大家总结下。另外,刚才新建项目SpringBoot整合jpa,在不进行任何配置下并未出现上述错误。SpringBoot版本是2.2.1.RELEASE

  • 10
    点赞
  • 6
    评论
  • 8
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

打赏
文章很值,打赏犒劳作者一下
相关推荐
©️2020 CSDN 皮肤主题: 程序猿惹谁了 设计师:白松林 返回首页

打赏

流烟默

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值