В момент deserializar, а именно, получив контент типа JSON в Controller и превращать в объект Java: как я могу делать для того, чтобы Джексон проигнорировал пустой объект?.
Я использую Джексон 2.6.6 и Спринг 4.2.6
Контент JSON, который получает мой controller, - следующего способа:
{
"id": 2,
"descripcion": "Descripción",
"objetoContenido": {}
}
Проблема состоит в том, что объект "objetoContenido" интерпретируется как таковым и, инстанция. Следовательно, после которого мой controller получает этот JSON, меня создает инстанция ObjetoContenido и я не нуждаюсь в том, что instancie но он будет интерпретирован как null.
Самое легкое решение состояло бы в том, чтобы в JSon уже он был со стоимостью null следующей формы:
{
"id": 2,
"descripcion": "Descripción",
"objetoContenido": null
}
Но я не является возможным это решение ввиду того, что контент JSON не зависит от меня, но он прибывает ко мне из этой формы.
Существует аннотация в стиль @JsonInclude (Include. NON_EMPTY) как они объясняют здесь, но что я функционировал для deserialización, который я полезный в этой ситуации?
------------------------Добавленная информация-------------------------------------
Я оставляю представление моих классов в информационный способ:
Моя организация в вопросе - следующего способа:
public class Entidad {
private long id;
private String descripcion;
private ObjetoContenido objetoContenido;
//Contructor, getters y setters omitidos
}
И класс объекта, который содержит моя организация, которая типа ObjetoContenido, - следующего способа:
public class ObjetoContenido {
private long objContId;
private String cadena;
//Contructor, getters y setters omitidos
}
К несчастью, если он приходит как "objetoContenido": {}
это объект instanciado всех всех.
Как временное решение, со мной случается, что в методе get свойства objetoContenido объекта Организация, ты спрашиваешь из-за какого-то поля, и если у него нет стоимости, возврати null. Например:
public ObjetoContenido getObjetoContenido {
return objetoContenido.getObjContId() == 0 ? null : this.objetoContenido;
}
Другой выбор состоял бы в том, чтобы у твоего объекта "ObjectoContenido" было свойство, которое он показывал, если он инициализировался или нет. Применяя это к решению, которое я предложил тебе, осталось бы нечто похожее:
public class Entidad {
private long id;
private String descripcion;
private ObjetoContenido objetoContenido;
//Contructor, getters y setters omitidos
public ObjetoContenido getObjetoContenido {
return objetoContenido.getInicializado() ? this.objetoContenido : null;
}
public setObjetoContenido(ObjetoContenido obj) {
this.objetoContenido = obj;
this.objetoContenido.setInicializado(true);
}
}
public class ObjetoContenido {
private bool inicializado = false;
private long objContId;
private String cadena;
//Contructor, getters y setters omitidos
}
Дело не в том, что он был намного лучше, но, по крайней мере, ты не должен зависеть от свойства, которое ты не контролируешь.
Я надеюсь, что это подает тебя.
У Джексона есть свойство, которое размещается точно наверху твоего класса, который ты используешь как model. Например:
@JsonIgnoreProperties(ignoreUnknown = true)
public class MiModelo {
...
}
Имей в виду, что это, должно быть, идет даже вверх твоего класса и не для mГ©todos индивиды.
ты Можешь консультировать свойства, которые поставляет Джексон для того, чтобы ты узнал то, что тебя делает
{}
– jasilva
01.11.2016, 00:40
Если это будет, чтобы выдавать контент объекта, содержавшего в "objetoContenido", параметры этого объекта будут null (если он назначен по умолчанию). instanciará, но у него будет стандартная настройка.
В случае, если это будет array Ваша длина будет нулем.
Я надеюсь, что он служит, так как, как я понимаю, Джексон не предотвращает instanciarlo, так как точно строитель верил пусто в (стандартную настройку), и устанавливает стоимость, обнаруженную в JSON, если они есть.