Jackson을 사용하여 JAXB 주석 객체를지도 객체로 직렬화합니다. 이것은 다음과 같은 오류가 발생Jackson을 사용하여 개체를 기본 입력을 사용하여 매핑하는 방법은 무엇입니까?
public class Test {
@XmlAccessorType(XmlAccessType.NONE)
public static class Inner {
@XmlAttribute
public int foo;
}
@XmlAccessorType(XmlAccessType.NONE)
public static class Outer {
@XmlAttribute
public String bar;
@XmlElement
public Inner in;
}
public static void main(String[] args) throws Exception {
ObjectMapper mapper = getMapper();
mapper.enableDefaultTyping();
Inner in = new Inner();
in.foo = 42;
Outer out = new Outer();
out.in = in;
out.bar = "thecakeisalie";
Object o = mapper.convertValue(out, TreeMap.class);
System.out.println(o);
}
public static ObjectMapper getMapper() {
ObjectMapper mapper = new ObjectMapper();
AnnotationIntrospector introspector = new JaxbAnnotationIntrospector();
mapper.setAnnotationIntrospector(introspector);
return mapper;
}
}
:
{bar=thecakeisalie, in={foo=42}}
: 라인 mapper.enableDefaultTyping();
은, 코드 작업을 생략하는 경우
Exception in thread "main" java.lang.IllegalArgumentException: Unexpected token (START_OBJECT), expected START_ARRAY: need JSON Array to contain As.WRAPPER_ARRAY type information for class java.lang.Object
at [Source: N/A; line: -1, column: -1]
at org.codehaus.jackson.map.ObjectMapper._convert(ObjectMapper.java:2493)
at org.codehaus.jackson.map.ObjectMapper.convertValue(ObjectMapper.java:2459)
at com.example.test.Test.main(Test.java:49)
Caused by: org.codehaus.jackson.map.JsonMappingException: Unexpected token (START_OBJECT), expected START_ARRAY: need JSON Array to contain As.WRAPPER_ARRAY type information for class java.lang.Object
at [Source: N/A; line: -1, column: -1]
at org.codehaus.jackson.map.JsonMappingException.from(JsonMappingException.java:163)
at org.codehaus.jackson.map.deser.StdDeserializationContext.wrongTokenException(StdDeserializationContext.java:261)
at org.codehaus.jackson.map.jsontype.impl.AsArrayTypeDeserializer._locateTypeId(AsArrayTypeDeserializer.java:100)
at org.codehaus.jackson.map.jsontype.impl.AsArrayTypeDeserializer._deserialize(AsArrayTypeDeserializer.java:86)
at org.codehaus.jackson.map.jsontype.impl.AsArrayTypeDeserializer.deserializeTypedFromAny(AsArrayTypeDeserializer.java:69)
at org.codehaus.jackson.map.deser.std.UntypedObjectDeserializer.deserializeWithType(UntypedObjectDeserializer.java:106)
at org.codehaus.jackson.map.deser.std.MapDeserializer._readAndBind(MapDeserializer.java:321)
at org.codehaus.jackson.map.deser.std.MapDeserializer.deserialize(MapDeserializer.java:249)
at org.codehaus.jackson.map.deser.std.MapDeserializer.deserialize(MapDeserializer.java:33)
at org.codehaus.jackson.map.ObjectMapper._readValue(ObjectMapper.java:2695)
at org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1308)
at org.codehaus.jackson.map.ObjectMapper._convert(ObjectMapper.java:2489)
... 2 more
다음에 출력 여기 내 문제를 설명하는 몇 가지 코드는
매퍼를 사용하여 json으로 직렬화하면 기본 입력으로 작동합니다.
기본 입력이 개체 변환과 호환되지 않습니까, 아니면 잘못 사용합니까?