Вы можете десериализации как JsonNode
на минимум и сделать некоторую логику, чтобы определить правильный тип. Если вы ищете конкретное решение, добавьте еще несколько деталей к вашему вопросу. Чтобы начать, вы должны начать:
@Test
public void testDoubleResponseType() throws IOException {
ImmutableList<String> jsonInputs = ImmutableList.of(
"{\"result\": \"0\"}",
"{\"result\": {\"fname\": \"abc\", \"lname\": \"xyz\"}}"
);
ObjectMapper om = new ObjectMapper();
for (String jsonInput : jsonInputs) {
JsonNode node = om.readValue(jsonInput, JsonNode.class);
JsonNode result = node.get("result");
if (result.isTextual()) {
assertEquals("0", result.asText());
} else if (result.isObject()) {
NameResponse nameResponse =
om.readValue(result.toString(), NameResponse.class);
assertEquals(new NameResponse("abc", "xyz"), nameResponse);
} else {
fail();
}
}
}
public static class NameResponse {
private final String fname;
private final String lname;
@JsonCreator
public NameResponse(@JsonProperty("fname") String fname,
@JsonProperty("lname") String lname) {
this.fname = fname;
this.lname = lname;
}
public String getFname() {
return fname;
}
public String getLname() {
return lname;
}
@Override
public boolean equals(Object o) {...}
}
'jackson' и' json' являются единственными тегами, которые вам нужны по этому вопросу, так как они в настоящее время сформулированы. –