0

この問題に少し近い問題に直面しましたが、すべての手順を実行しても、まだそのような例外があります:

org.codehaus.jackson.map.JsonMappingException: クラス org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer のシリアライザーが見つからず、BeanSerializer を作成するためのプロパティが見つかりません (例外を回避するには、SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS を無効にします) ) (参照チェーンを介して) : java.util.ArrayList[0]->com.myPackage.SomeEntity["mainEntity"]->com.myPackage.MainEntity["subentity1"]->com.myPackage.Subentity1_$$_javassist_8["handler"])

ここに私のエンティティのコードがあります:

@JsonAutoDetect
public class MainEntity {

    private Subentity1 subentity1;

    private Subentity2 subentity2;

    @JsonProperty
    public Subentity1 getSubentity1() {
        return subentity1;
    }

    public void setSubentity1(Subentity1 subentity1) {
        this.subentity1 = subentity1;
    }

    @JsonProperty
    public Subentity2 getSubentity2() {
        return subentity2;
    }

    public void setSubentity2(Subentity2 subentity2) {
        this.subentity2 = subentity2;
    }
}



@Entity
@Table(name = "subentity1")
@JsonAutoDetect
public class Subentity1 {

    @Id
    @Column(name = "subentity1_id")
    @GeneratedValue
    private Long id;

    @Column(name = "name", length = 100)
    private String name;

    @JsonIgnore
    @OneToMany(mappedBy = "subentity1")
    private List<Subentity2> subentities2;

     @JsonProperty
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    @JsonProperty
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    //here I didin't add @JsonProperty, cause it leads to cycling during serialization
    public List<Subentity2> getSubentity2s() {
        return subentity2s;
    }

    public void setSubentity2s(List<Subentity2> subentity2s) {
        this.subentity2s = subentity2s;
    }

}

@Entity
@Table(name = "subentity2")
@JsonAutoDetect
public class Subentity2 {
    @Id
    @Column(name = "subentity2_id")
    @GeneratedValue
    private Long id;

    @Column(name = "name", length = 50)
    private String name;

    @ManyToOne
    @JoinColumn(name = "subentity1_id")
    private Subentity1 subentity1;

    @JsonProperty
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    @JsonProperty
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @JsonProperty
    public Subentity1 getSubentity1() {
        return subentity1;
    }

    public void setSubentity1(Subentity1 subentity1) {
        this.subentity1 = subentity1;
    }

ここに変換のための私の方法のコードがあります:

 private String toJSON(Object model) {
        ObjectMapper mapper = new ObjectMapper();
        String result = "";
        try {
            result = mapper.writeValueAsString(model);
        } catch (JsonGenerationException e) {
            LOG.error(e.getMessage(), e);
        } catch (JsonMappingException e) {
            LOG.error(e.getMessage(), e);
        } catch (IOException e) {
            LOG.error(e.getMessage(), e);
        }
        return result;
    }

ヘルプ、アドバイス、またはコードに非常に感謝します:)

UPD

また、コントローラーからコードを追加するのを忘れていました:

String result = "";
        List<SomeEntity> entities = someEntityService.getAll();
        Hibernate.initialize(entities);
        for (SomeEntity someEntity : entities) {
            Hibernate.initialize(someEntity.mainEntity());
            Hibernate.initialize(someEntity.mainEntity().subentity1());
            Hibernate.initialize(someEntity.mainEntity().subentity2());
        }
        result = this.toJSON(entities);

必要なフィールドがあるため、無視することはできません

4

3 に答える 3

1

基本的に、フィールドの一部は、怠惰な休止状態のプロキシにラップされています。オブジェクトをシリアル化する前に呼び出すHibernate.initialize(model)と、遅延コレクションと参照が読み込まれます。

しかし、私はデータベース モデルとビュー モデルを混在させません。これは悪い習慣です。Restful モデルの一連のクラスを作成し、シリアル化の前にデータベース エンティティをクラスに変換します。

于 2012-11-19T15:44:56.780 に答える
0

クラスにある平面フィールド(String、Boolean、Doubleなど)を使用してBeanを作成し、変換用のメソッドを作成しました

于 2012-11-20T08:24:27.590 に答える