1. 程式人生 > >Hibernate類沒有找到序列化器解決方案

Hibernate類沒有找到序列化器解決方案

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可以使得在轉換的時候忽略掉這些屬性