내가처럼 보이는 잭슨과 JSON 문자열을 구문 분석을 시도하고있다 : 나는 Wrapper
또 다른 자바 클래스를 만들어 단순히 정수로 매핑하는 것을 방지하기 위해 노력하고자바 클래스에 JSON 매핑
{
"name":"John",
"Wrapper":{
"id":0
}
}
을 대신. 이것은 주로 컬렉션의 래퍼 XML 요소 을 생산하는 데 사용하기위한 것입니다
: 나는 문서 상태에도 불구하고
@XmlElementWrapper
를 사용했습니다.
하지만 작동하지 않습니다. 여기
Exception in thread "main" org.codehaus.jackson.map.JsonMappingException: Can not deserialize instance of java.lang.Integer out of START_OBJECT token
at [Source: [email protected]; line: 1, column: 15] (through reference chain: Test["Wrapper"])
at org.codehaus.jackson.map.JsonMappingException.from(JsonMappingException.java:163)
at org.codehaus.jackson.map.deser.StdDeserializationContext.mappingException(StdDeserializationContext.java:219)
at org.codehaus.jackson.map.deser.std.StdDeserializer._parseInteger(StdDeserializer.java:305)
at org.codehaus.jackson.map.deser.std.StdDeserializer$IntegerDeserializer.deserialize(StdDeserializer.java:795)
at org.codehaus.jackson.map.deser.std.StdDeserializer$IntegerDeserializer.deserialize(StdDeserializer.java:782)
at org.codehaus.jackson.map.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:299)
at org.codehaus.jackson.map.deser.SettableBeanProperty$FieldProperty.deserializeAndSet(SettableBeanProperty.java:579)
at org.codehaus.jackson.map.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:697)
at org.codehaus.jackson.map.deser.BeanDeserializer.deserialize(BeanDeserializer.java:580)
at org.codehaus.jackson.map.ObjectMapper._readMapAndClose(ObjectMapper.java:2723)
at org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1854)
at Test.main(Test.java:37)
은 실행 가능한 예는 다음과 같습니다 : 나는 다음과 같은 예외가
@XmlAccessorType(XmlAccessType.FIELD)
public class Test {
public static void main(String[] args) throws JsonParseException, JsonMappingException, IOException {
String json =
"{" +
"\"name\":\"John\","+
"\"Wrapper\":{"+
" \"id\":0}"+
"}";
ObjectMapper mapper = new ObjectMapper();
mapper.setAnnotationIntrospector(new JaxbAnnotationIntrospector());
mapper.setSerializationInclusion(Inclusion.NON_NULL);
Test test = mapper.readValue(json, Test.class);
System.out.println(test.toString());
}
@XmlElement(name="name")
private String name;
@XmlElementWrapper(name="Wrapper")
@XmlElement(name="id")
private Integer wrapperId;
@Override
public String toString() {
return "Test [name=" + name + ", wrapperId=" + wrapperId + "]";
}
}
Jackson 이외의 JSON 바인딩 제공 업체에 관심이 있으시면 EclipseLink MOXy의'@ XmlPath' 주석을 사용하여 유스 케이스를 지원하는 방법을 보여주는 링크를 참조하십시오. http://blog.bdoughan.com/2011/08/ binding-to-json-xml-geocode-example.html –