반응형
Jackson JSON 루트 요소에 의한 역직렬화
나는 잭슨에게 간단하게 풀어야 한다고 생각하는 질문을 하고 있지만, 그것은 나를 죽인다.
예를 들어 다음과 같은 Java POJO 클래스가 있다고 가정합니다(Getters 및 Setters for me).
class User {
private String name;
private Integer age;
}
그리고 다음과 같은 JSON을 User 객체로 역직렬화하려고 합니다.
{
"user":
{
"name":"Sam Smith",
"age":1
}
}
Jackson은 사용자가 JSON의 첫 번째 수준 개체가 아니기 때문에 나에게 문제를 주고 있습니다.1개의 User 객체를 가진 UserWrapper 클래스를 만들고 그것을 사용하여 역직렬화할 수 있지만, 보다 우아한 솔루션이 있을 것입니다.
어떻게 해야 되지?
편집: 이 솔루션은 Jackson < 2.0에서만 동작합니다.
고객의 경우는, 다음의 간단한 솔루션이 있습니다.
- 모델 클래스에 주석을 달아야 합니다.
@JsonRootName(value = "user")
; - 매퍼를 다음과 같이 설정해야 합니다.
om.configure(Feature.UNWRAP_ROOT_VALUE, true);
(1.9의 경우) 및om.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);
(버전 2의 경우).
바로 그거야!
@JsonRootName(value = "user")
public static class User {
private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(final String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(final Integer age) {
this.age = age;
}
@Override
public String toString() {
return "User [name=" + name + ", age=" + age + "]";
}
}
ObjectMapper om = new ObjectMapper();
om.configure(Feature.UNWRAP_ROOT_VALUE, true);
System.out.println(om.readValue("{ \"user\": { \"name\":\"Sam Smith\", \"age\":1 }}", User.class));
다음과 같이 인쇄됩니다.
User [name=Sam Smith, age=1]
언급URL : https://stackoverflow.com/questions/11704255/jackson-json-deserialization-with-root-element
반응형
'IT' 카테고리의 다른 글
JSON.NET JsonConvert 와NET JavaScript Serializer (0) | 2023.03.09 |
---|---|
Material-UI RaisedButton 링크를 외부 URL에 연결하려고 해도 실패합니까? (0) | 2023.03.09 |
코멘트 내의 "@" 기호는 무엇입니까? (0) | 2023.03.09 |
stdin, start, ssh, stderr 및 stdout 오류로 인해 vgrant up이 실패함 (0) | 2023.03.09 |
기능하는 setState 내에서 이벤트 대상이 null입니다. (0) | 2023.03.09 |