У меня есть POJO, который используется для отображения значений, полученных из rabbitmq. Сообщения отправляются из сторонних сервисов, которые я не контролирую. Проблема состоит в том, что эти службы не отправляют определенные поля согласованным образом.
Например, в случае поля error
это поле будет содержать информацию только тогда, когда сторонняя служба хочетотправить сообщение, чтобы сообщить, что есть ошибка. Некоторые службы могут отправлять свои JSON-сообщения в очередь следующим образом:
{
id: 123,
name: "PersonA",
error: null
}
А затем существуют также службы, которые могут отправлять свои JSON-сообщения следующим образом:
{
id: 123,
name: "PersonA",
error: []
}
также службы, которые могут просто пропустить это поле полностью:
{
id: 123,
name: "PersonA"
}
Конечно, если есть ошибка, это поле ошибки будет содержать поля внутри него:
{
id: 123,
name: "PersonA",
error: {
message: "Cannot find PersonA"
}
}
Итак, естьвероятность того, что поле ошибки может быть null
, undefined
, array
или object
. Проблема в том, что я могу определить только один тип в своем POJO для поля error
.
public class MyMessage {
private int id;
private MessageError error;
private String name;
@JsonCreator
public MyMessage(
@JsonProperty("id") int id,
@JsonProperty("error") MessageError error, // error is a MessageError object already but what is sent in could be null, undefined, an array or an object
@JsonProperty("name") String name
) {
this.id = id;
this.error = error;
this.name = name;
}
}
public class MessageError {
private String message;
@JsonCreator
public MessageError(
@JsonProperty("message") String message
) {
this.message = message;
}
}
Я использую Spring с Джексоном. В этом случае, как я могу обработать и отобразить все возможные значения, которые могут быть присвоены полю error
в сообщении, в POJO, когда оно десериализуется?