Предполагая, что у меня есть два типа ответов от службы - положительные и отрицательные. Они имеют формат JSON. Когда я использую Jackson API для создания соответствующих java объектов, я должен написать код, подобный следующему:
import com.fasterxml.jackson.databind.ObjectMapper;
private ObjectMapper objectMapper = new ObjectMapper();
String json = ... // JSON received from a service
ServiceResponse response = objectMapper.readValue(json, ServiceResponse.class);
// Analyze the response
if (response instanceof PositiveServiceResponse) {
...
}
...
Проблема заключается в том, что оба типа ответов не имеют ничего общего. Нет свойства типа. В противном случае я мог бы использовать Vehicle-Car-Truck пример из https://www.baeldung.com/jackson-inheritance
Пример положительного ответа:
{
"city": "c",
"street": "s"
}
Отрицательный ответ:
{
"errorMsg": "error",
"errorCode": "572"
}
NegativeServiceResponse
содержит errorCode
свойство. Можно ли «сказать» API-интерфейсу Джексона о создании и экземпляре класса NegativeServiceResponse
, если JSON содержит свойство, а экземпляре PositiveServiceResponse
в противном случае? Конечно, я могу разобрать JSON, используя низкоуровневые механизмы (JsonNode
et c.), Но есть ли более элегантное решение?