좋은 시간!Jackson : 사용자 지정 디시리얼라이저에서 임의의 노드 값 가져 오기
json 문자열이 {id:'a', type:'b', category:'c'}
이고 비즈니스 로직이 카테고리 객체를 작성하기 위해 카테고리 이름 ('c')과 유형 ('b')을 알아야합니다. 분명히 내가 카테고리 deserializer (@JsonDeserialize(using = CategoryCustomDeserializer.class)
)를 작성해야하고 카테고리의 이름을 얻는 것은 간단하지만 유형의 값을 얻는 방법을 알아낼 수는 없다 ... 나는 이것을 시도했다 : jsonParser.getCodec().readTree(jsonParser)
,하지만 null
을 반환합니다.
올바른 방법을 제안하십시오.
편집 :
public class CategoryNameDeserializer extends JsonDeserializer<Category> {
@Override
public Category deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException {
if (jp.getCurrentToken() != JsonToken.END_OBJECT) {
String categoryName = jp.getText();
String type = ?????? <------------------------ How to do it
return Service.getInstance().getCategory(categoryName, type);
}
return null;
}
}
사용자 지정 디시리얼라이저를 작성해야한다는 것은 분명하지 않습니다. 실제로 Jackson POJO 바인딩을 사용하는 것이 훨씬 간단하고 불필요한 추가 필드는 무시합니다. 어떤 이유에서든 사용자 정의 디시리얼라이저를 계속 사용하기로 결정하면 범주 이름을 얻는 것과 같은 방식으로 형식 값을 가져올 수 있습니다. 질문에 현재 디시리얼라이저 코드를 포함 할 수 있습니다. – Perception
@Perception, 실제로 사용자 지정 deserializer가 필요합니다. 왜냐하면 Category 객체를 작성하는 동안해야 할 일이 있기 때문입니다. 디시리얼라이저 코드를 추가했습니다. – Dmitry