Hibernate類沒有找到序列化器解決方案
阿新 • • 發佈:2018-12-17
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可以使得在轉換的時候忽略掉這些屬性