RestTemplate과 함께 REST API를 사용하고 있습니다. API에서 얻는 응답에는 중첩 된 객체가 많이 있습니다. 여기에 예제와 같은 작은 조각이다 :CustomDeserializer에 기본 (arg 없음) 생성자가 없습니다.
"formularios": [
{
"form_data_id": "123006",
"form_data": {
"form_data_id": "123006",
"form_id": "111",
"efs": {
"1": {},
"2": "{\"t\":\"c\",\"st\":\"m\",\"v\":[{\"id\":\"3675\",\"l\":\"a) Just an example\",\"v\":\"1\"},{\"id\":\"3676\",\"l\":\"b) Another example.\",\"v\":\"2\"}]}"
}
}
난 데 문제는 그 시대의 가장 "1"실제로는 그냥 "2"와 같은 콘텐츠를 가지고 있으며, 잭슨은 문자열로 구문 분석 "efs"개체에. 하지만 코드 스 니펫과 마찬가지로 API에서 빈을 보내고 Jackson이이를 Object로 가져 오므로 START_OBJECT에 대한 오류 메시지가 표시됩니다 (정확한 오류를 기억할 수는 없지만이 질문에 중요하지는 않음).).
그래서 사용자 지정 디시리얼라이저를 만들어 잭슨이 "1"을 읽을 때 빈 개체를 무시하고 null 문자열로 구문 분석합니다.
여기 내 사용자 지정 디시리얼라이저의 :
public class CustomDeserializer extends StdDeserializer<Efs> {
public CustomDeserializer(Class<Efs> t) {
super(t);
}
@Override
public Efs deserialize(JsonParser jp, DeserializationContext dc)
throws IOException, JsonProcessingException {
String string1 = null;
String string2 = null;
JsonToken currentToken = null;
while ((currentToken = jp.nextValue()) != null) {
if (currentToken.equals(JsonToken.VALUE_STRING)) {
if (jp.getCurrentName().equals("1")) {
string1 = jp.getValueAsString();
} else {
string2 = jp.getValueAsString();
}
} else {
if (jp.getCurrentName().equals("2")) {
string2 = jp.getValueAsString();
}
}
}
return new Efs(string1, string2);
}
}
그리고 이것은 API의 응답 수신 할 때 나는 그것을 사용하고 방법입니다 : 내가 오류를 받고 있어요
ObjectMapper mapper = new ObjectMapper();
SimpleModule mod = new SimpleModule("EfsModule");
mod.addDeserializer(Efs.class, new CustomDeserializer(Efs.class));
mapper.registerModule(mod);
List<HttpMessageConverter<?>> messageConverters = new ArrayList<>();
MappingJackson2HttpMessageConverter jsonMessageConverter = new MappingJackson2HttpMessageConverter();
jsonMessageConverter.setObjectMapper(mapper);
messageConverters.add(jsonMessageConverter);
RestTemplate restTemplate = new RestTemplate();
restTemplate.setMessageConverters(messageConverters);
을 :
CustomDeserializer has no default (no arg) constructor
그러나 내가 뭘 잘못하고 있는지, 어떻게 해결하는지 정확히 알지 못합니다. 오랜 질문에 대한 도움과 사과에 감사 드리며 최대한 많은 문맥을 제공하고자했습니다.
오 와우 내가 바보 하하 느낌을하지만, 그래 그것은 감사했다. – abril