2012-11-30 5 views
0

JAVA 코드에서 GSON을 사용하여 JSON에 DTO를 직렬화하려고합니다. DTO는 추상 클래스를 확장하고 java.io.Serializable도 구현합니다. 그 구성원 중 하나 인 DTO는 보호 된 String [] (2 차원 배열)을가집니다.GSON을 사용하는 Hibernate DTO의 serializaion에서 오류가 발생했습니다.

지금까지는 오류가 발생하지 않았으므로 지금까지 도움이되지 않았습니다.

심각 : java.lang.Class의 직렬화 시도 : org.hibernate.proxy.HibernateProxy의 Servlet.service() 서블릿 JSP 대한 예외를 java.lang.UnsupportedOperationException가 발생했습니다. 형식 어댑터를 등록하는 것을 잊었습니까? at com.google.gson.internal.bind.TypeAdapters $ 1.write (TypeAdapters.java:62) at com.google.gson.internal.bind.TypeAdapters $ 1.write (TypeAdapters.java:59) at com. google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write (TypeAdapterRuntimeTypeWrapper.java:68) (com.google.gson.internal.bind.ArrayTypeAdapter.write (ArrayTypeAdapter.java:93) , com.google.gson.internal). bind.TypeAdapterRuntimeTypeWrapper.write (TypeAdapterRuntimeTypeWrapper.java:68) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory $ 1.write (ReflectiveTypeAdapterFactory.java:89) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory $ Adapter .write (ReflectiveTypeAdapterFactory.java:200) at com.google.gson.internal.bind.TypeAd com.google.gson.internal.bind.ReflectiveTypeAdapterFactory $ Adapter.write에서 com.google.gson.internal.bind.ReflectiveTypeAdapterFactory $ 1.write (ReflectiveTypeAdapterFactory.java:89) 에서 apterRuntimeTypeWrapper.write (TypeAdapterRuntimeTypeWrapper.java:68) com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write에서 (ReflectiveTypeAdapterFactory.java:200) (TypeAdapterRuntimeTypeWrapper.java:68) ReflectiveTypeAdapterFactory.java (1.write com.google.gson.internal.bind.ReflectiveTypeAdapterFactory $에서 : 89) (com.google.gson.internal.bind.ReflectiveTypeAdapterFactory $ Adapter.write (ReflectiveTypeAdapterFactory.java:200) (com.google.gson.Gson.toJson (Gson.java:546) , com.google.gson.Gson.toJson) gson.Gson.toJson (Gson.java:525) com.google.gson.Gson.toJson에서 com.google.gson.Gson.toJson (Gson.java:480) (Gson.java:460)

에서 점점 어떤 도움은 설명 또는 감사합니다 해결.

답변

0

최대 절전 모드 DTO를 직렬화하려고하면 처음에 선언 한 것과 같은 개체가 아닐 수 있습니다. Hibernate는 당신의 DTO를 기반으로하지만 지속성 관련 작업을 수행하기위한 다른 필드를 기반으로 Proxy 클래스를 작성합니다. 따라서 DTO가 최대 절전 모드 작동에 참여하면 DTO가 아니라 프록시가됩니다. 객체를 직렬화하려고 시도하기 전에 객체의 내용을 새로운 일반 DTO에 복사해야합니다. 개체 getClass() 메서드 출력을 인쇄하여이를 테스트 할 수 있습니다. 프록시 개체이며 GSON은 일부 프록시 필드를 serialize하는 방법을 알지 못합니다. 희망이 도움이됩니다.

관련 문제