를 사용하여 인덱스 배열 역 직렬화 않습니다 XML
형식으로 요청이있을 경우가 어떻게 내가 형식의 배열을 반환하는 웹 서비스 참조하고있어 잭슨
{
"ZooAnimals": {
"@size": "2",
"Animal": {
"0": {
"@name": "elephant",
"@size": "huge"
},
"1": {
"@name": "termite",
"@size": "verysmall"
}
}
}
}
그것을 반환
<ZooAnimals size="2">
<Animal name="elephant" size="huge"></Animal>
<Animal name="termite" size="very small"></Animal>
</ZooAnimals>
Java
클래스로 올바르게 deserialize되는지 확인하기위한 테스트를 작성하고 있습니다. XML
은 제대로 작동하지만 JSON
(jackson 사용)은 오류가 발생합니다. 인식 할 수없는 필드 "0"은 무시할 수 없음으로 표시됩니다.
JSON 응답을 제어하지 않으며 단일 클래스를 사용하여 비 직렬화 된 컨텐츠를 수신하는 것을 선호합니다. 내가 상속 클래스는 다음과 같이 주석 하였다
@XmlAccessorType(XmlAccessType.FIELD)
@JsonInclude(JsonInclude.Include.NON_DEFAULT)
@JsonTypeName("ZooAnimals")
public class ZooAnimals {
@XmlAttribute
@JsonProperty("@size")
private String size;
@XmlElement(name = "Animal", required = false)
@JsonProperty("Animal")
private List<Animal> animalList;
...
}
@XmlAccessorType(XmlAccessType.FIELD)
@JsonInclude(JsonInclude.Include.NON_DEFAULT)
@JsonTypeName("Animal")
public class Animal {
@XmlAttribute
@JsonProperty("@name")
private String name;
@XmlAttribute
@JsonProperty("@size")
private String size;
...
}
잭슨 내 사용자 정의 코드를 작성하지 않고도 위의 텍스트를 역 직렬화 할 수 있도록이 클래스를 주석하는 방법이 있나요? 제쳐두고 주문 유지는 필수 사항이 아닙니다.
@XmlAccessorType(XmlAccessType.FIELD)
@JsonInclude(JsonInclude.Include.NON_DEFAULT)
@JsonTypeName("ZooAnimals")
class ZooAnimals {
@XmlAttribute
@JsonProperty("@size")
private String size;
@XmlElement(name = "Animal", required = false)
private List<Animal> animalList;
@JsonAnySetter
public void setAny(String propertyName, Map<String, Animal> map) {
animalList = new ArrayList<Animal>(map.values());
}
// getters, setters, toString
}
당신은 모든 Animal
클래스를 변경할 필요가 없습니다 :
나는 그것을 의심한다. 웹 서비스는 json 배열을 반환하지 않습니다 (예 : http://www.w3schools.com/json/json_syntax.asp 참조). 따라서 사용자 정의 직렬화를 작성하여 목록에 넣어야 할 것입니다. – Taylor