Struts2 JSON 플러그인 "Lazy"데이터로 작동하지 않습니다.
-
22-07-2019 - |
문제
나는 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 최대 절전 모드의 직렬화를 더 잘 처리하지만 물론 자체의 단점이 있으므로 마일리지가 다를 수 있습니다.
다른 팁
최대 절전 모드에서 개체를 분리하고 직렬화하십시오.
제휴하지 않습니다 StackOverflow