Hibernate类没有找到序列化器解决方案
异常信息类似如下
No serializer found for class org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: com.alibaba.fastjson.JSONObject["data"]- >cn.zytao.taosir.auth.entity.Role_$$_jvst21b_0["handler"])
有道翻译如下
没有为org.hibernate.proxy.pojo.javassist类找到序列化器。没有发现创建 BeanSerializer的属性(为了避免异常,请禁用 SerializationFeature.FAIL_ON_EMPTY_BEANS)(通过引用 链:com.alibaba.fastjson.JSONObject["data"]->cn. zytao.taosir.au.entity.role_ $$_jvst21b_0["handler"])
总之,没有为org.hibernate.proxy.pojo.javassist类找到序列化器。
原因:
hibernate会给被管理的pojo加入一个hibernateLazyInitializer属性,
然而我们在转json的时候,这个属性是不允许反射的,所以抛出了异常
我们可以去配置文件中添加一个配置
properties
spring.jackson.serialization.fail-on-empty-beans=false
yml/yaml
spring: jackson: serialization: fail-on-empty-beans: false
这样就可以转换了
但是,hibernateLazyInitializer handler 两个也被作为参数转换成json
我们可以在实体类的声明上添加注解来解决,例如
@JsonIgnoreProperties(value={"hibernateLazyInitializer","handler"}) public class Role implements Serializable { private static final long serialVersionUID = 1L; /** * 角色代码 */ @Id private String roleCode; }
@JsonIgnoreProperties可以使得在转换的时候忽略掉这些属性