0
현재 제네릭을 사용하는 모델에서 작업 중이며 조금 복잡합니다. 나는 비슷한 질문에 답을 얻었지만 그들 중 누구도 분명히 내 대답에 도달하지 못한다는 것을 이해합니다. 내가 직렬화하는 동안 다음 java.lang.StackOverflowError의를 얻을 수Jackson을 사용하여 Java generics 직렬화 및 비 직렬화 : StackOverflowError
public static void main(String[] args) throws Exception
{
Cls2<ChildContainer> req = new Cls2<ChildContainer>();
File file = new File("==some-file-path==");
ObjectMapper mapper = new ObjectMapper();
mapper.writeValue(file, req);
//read it back using mapper.readValue(file, clazz) --Not sure about this
}
을 :
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = As.WRAPPER_OBJECT, property = "type")
@JsonSubTypes(
{
@Type(value = Cls2.class, name = "Cls2")
})
abstract class Cls1<T> implements Serializable
{
private T myObj;
public T getMyObj()
{
return myObj;
}
public Cls1(T obj)
{
myObj = obj;
}
@JsonTypeName("Cls2")
public static class Cls2<E extends Int1> extends Cls1<E> implements Serializable
{
public Cls2()
{
super(null);
}
}
}
@JsonTypeName("ChildContainer")
class ChildContainer extends ParentContainer<OtherBean>
{
}
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = As.WRAPPER_OBJECT, property = "type")
@JsonSubTypes(
{
@Type(value = ChildContainer.class, name = "ChildContainer")
})
class ParentContainer<T extends RootBean> implements Int1
{
}
@JsonTypeName("OtherBean")
class OtherBean extends RootBean
{
}
@JsonTypeName("RootBean")
class RootBean implements Int1
{
}
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = As.WRAPPER_OBJECT, property = "type")
@JsonSubTypes(
{
@Type(value = RootBean.class, name = "RootBean"),
@Type(value = OtherBean.class, name = "OtherBean")
})
interface Int1 extends Serializable
{
}
내 목표는 직렬화 다음과 같이 잭슨을 사용 deserialze하는 것입니다
여기 내 모델입니다Exception in thread "main" java.lang.StackOverflowError
at java.lang.Class.getDeclaringClass(Native Method)
at org.codehaus.jackson.map.type.TypeBindings._resolveBindings(TypeBindings.java:290)
at org.codehaus.jackson.map.type.TypeBindings._resolve(TypeBindings.java:221)
at org.codehaus.jackson.map.type.TypeBindings.findType(TypeBindings.java:138)
at org.codehaus.jackson.map.type.TypeFactory._fromVariable(TypeFactory.java:951)
at org.codehaus.jackson.map.type.TypeFactory._constructType(TypeFactory.java:493)
at org.codehaus.jackson.map.type.TypeFactory.findTypeParameters(TypeFactory.java:423)
at org.codehaus.jackson.map.type.TypeFactory.findTypeParameters(TypeFactory.java:395)
at org.codehaus.jackson.map.type.TypeBindings._resolveBindings(TypeBindings.java:299)
at org.codehaus.jackson.map.type.TypeBindings._resolveBindings(TypeBindings.java:290)
at org.codehaus.jackson.map.type.TypeBindings._resolve(TypeBindings.java:221)
at org.codehaus.jackson.map.type.TypeBindings.findType(TypeBindings.java:138)
at org.codehaus.jackson.map.type.TypeFactory._fromVariable(TypeFactory.java:951)
at org.codehaus.jackson.map.type.TypeFactory._constructType(TypeFactory.java:493)
at org.codehaus.jackson.map.type.TypeFactory.findTypeParameters(TypeFactory.java:423)
at org.codehaus.jackson.map.type.TypeFactory.findTypeParameters(TypeFactory.java:395)
at org.codehaus.jackson.map.type.TypeBindings._resolveBindings(TypeBindings.java:299)
at org.codehaus.jackson.map.type.TypeBindings._resolveBindings(TypeBindings.java:290)
도움을 주시면 감사하겠습니다.
스택의 (반복 된) 부분을 오류 메시지에서 또는 디버거에서 캡처 한대로 게시하면 원형이 어디에서 발생하는지 확인할 수 있습니다. –
@AndrzejDoyle stacktrace를 사용하여 게시물을 업데이트했습니다. – Chris
Jackson에서 버그 인 것으로 보이는 유형 확인에 무한 재귀가 있습니다. 'Cls2'를 독립 실행 형 클래스로 추출해보십시오. – BalusC