반응형
Jackson으로 자식 ID 만 직렬화하는 방법
Jackson (fasterxml.jackson 2.1.1)을 사용할 때 자식의 ID 만 직렬화하는 기본 제공 방법이 있습니까? 참조 Order
가있는 REST를 통해 전송하려고합니다 Person
. 그러나 person 객체는 매우 복잡하고 서버 측에서 새로 고칠 수 있으므로 기본 키만 있으면됩니다.
아니면이를 위해 사용자 지정 serializer가 필요합니까? 아니면 @JsonIgnore
다른 모든 속성이 필요 합니까? 객체를 Person
요청할 때 데이터가 다시 전송되는 것을 방지 할 수 Order
있습니까? 아직 필요한지 확실하지 않지만 가능하면 제어하고 싶습니다 ...
몇 가지 방법이 있습니다. 첫 번째는 @JsonIgnoreProperties
다음과 같이 자식에서 속성을 제거하는 데 사용 하는 것입니다.
public class Parent {
@JsonIgnoreProperties({"name", "description" }) // leave "id" and whatever child has
public Child child; // or use for getter or setter
}
또 다른 가능성은 Child 객체가 항상 id로 직렬화되는 경우입니다.
public class Child {
// use value of this property _instead_ of object
@JsonValue
public int id;
}
또 하나의 접근 방식은 @JsonIdentityInfo
public class Parent {
@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id")
@JsonIdentityReference(alwaysAsId=true) // otherwise first ref as POJO, others as id
public Child child; // or use for getter or setter
// if using 'PropertyGenerator', need to have id as property -- not the only choice
public int id;
}
직렬화에도 작동하고 id 이외의 속성은 무시합니다. 그러나 결과는 Object로 래핑되지 않습니다.
다음과 같이 사용자 지정 serializer를 작성할 수 있습니다.
public class ChildAsIdOnlySerializer extends StdSerializer<Child> {
// must have empty constructor
public ChildAsIdOnlySerializer() {
this(null);
}
public ChildAsIdOnlySerializer(Class<Child> t) {
super(t);
}
@Override
public void serialize(Child value, JsonGenerator gen, SerializerProvider provider)
throws IOException {
gen.writeString(value.id);
}
그런 다음 필드에 @JsonSerialize
다음 과 같이 주석을 달아 사용하십시오 .
public class Parent {
@JsonSerialize(using = ChildAsIdOnlySerializer.class)
public Child child;
}
public class Child {
public int id;
}
참조 URL : https://stackoverflow.com/questions/17542240/how-to-serialize-only-the-id-of-a-child-with-jackson
반응형
'programing' 카테고리의 다른 글
Double.valueof javadoc에서 캐시하지 않은 값을 캐시한다고 말하는 이유는 무엇입니까? (0) | 2021.01.19 |
---|---|
phantomjs“SyntaxError : Parse error”메시지에서 더 많은 정보 얻기 (0) | 2021.01.19 |
양식 데이터를 잃지 않고 현재 페이지를 다시로드하는 방법은 무엇입니까? (0) | 2021.01.19 |
C ++ 구조의 이상한 동작 [1 부] (0) | 2021.01.19 |
syntastic vim 플러그인에 C ++ 11 지원을 추가하는 방법은 무엇입니까? (0) | 2021.01.19 |