문제

나는 onetoone 관계가있는 엔티티가 게으름으로 가져온 것입니다.

@Entity
public class Person {
    @Id
    private Integer id;

    @Column(length=60)
    private String address;

    @OneToOne(fetch=FetchType.LAZY)
    @JoinColumn(name="idProvince")
    private Province province;
}

이것은 내가하는 테스트입니다. JSONPLUGIN (Struts의 '공식'JSON 플러그인 2) :

    List<Person> people = personService.findAll();
    String result = JSONUtil.serialize(people);
    System.out.println(result);

그리고 이것은 내가 얻는 예외입니다 (Struts2 동작과 @JSON 주석이있는이 플러그인을 사용할 때 동일한 예외) :

com.googlecode.jsonplugin.JSONException: java.lang.IllegalAccessException:
Class com.googlecode.jsonplugin.JSONWriter can not access a member of class 
org.postgresql.jdbc4.AbstractJdbc4Statement with modifiers "public"
    at com.googlecode.jsonplugin.JSONWriter.bean(JSONWriter.java:237)
    at com.googlecode.jsonplugin.JSONWriter.process(JSONWriter.java:159)
    at com.googlecode.jsonplugin.JSONWriter.value(JSONWriter.java:125)
    at com.googlecode.jsonplugin.JSONWriter.array(JSONWriter.java:407)
    at com.googlecode.jsonplugin.JSONWriter.process(JSONWriter.java:149)
    at com.googlecode.jsonplugin.JSONWriter.value(JSONWriter.java:125)
    at com.googlecode.jsonplugin.JSONWriter.write(JSONWriter.java:93)
    at com.googlecode.jsonplugin.JSONWriter.write(JSONWriter.java:76)
    at com.googlecode.jsonplugin.JSONUtil.serialize(JSONUtil.java:62)
    ...

나는 최대 절전 모드를 사용하고 있으며 fetch = fetchtype.eger를 변경할 때 위의 동일한 코드가 작동합니다. 게으른 하중이 프록시 객체를 생성하여 실패한다고 생각합니다.

내 질문은 다음과 같습니다. 게으르게로드 된 속성을 포함하는 객체를 직렬화 할 수 있습니까?

도움이 되었습니까?

해결책

JSON-LIB를 사용하는 동안 같은 문제가 있었으며 실제로 객체가 프록시이기 때문입니다.

나는 찾았다 Google-Gson 최대 절전 모드의 직렬화를 더 잘 처리하지만 물론 자체의 단점이 있으므로 마일리지가 다를 수 있습니다.

다른 팁

최대 절전 모드에서 개체를 분리하고 직렬화하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top