Форма существует для того, чтобы Джексон проигнорировал пустой objecto в deserializar?

В момент 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

}

3
задан 23.05.2017, 15:39
3 ответа

К несчастью, если он приходит как "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

}

Дело не в том, что он был намного лучше, но, по крайней мере, ты не должен зависеть от свойства, которое ты не контролируешь.

Я надеюсь, что это подает тебя.

0
ответ дан 24.11.2019, 12:50

У Джексона есть свойство, которое размещается точно наверху твоего класса, который ты используешь как model. Например:

@JsonIgnoreProperties(ignoreUnknown = true)
public class MiModelo {
    ...
}

Имей в виду, что это, должно быть, идет даже вверх твоего класса и не для mГ©todos индивиды.

ты Можешь консультировать свойства, которые поставляет Джексон для того, чтобы ты узнал то, что тебя делает

0
ответ дан 24.11.2019, 12:50
  • 1
    Я думаю, что Мау не нужно, чтобы было проигнорировано свойство, но cre и # 233; json с недействительным вместо {} – jasilva 01.11.2016, 00:40
  • 2
    @jasilva Точный, в самом деле и #233; sta anotaci и # 243; n оно не функционирует в моем случае ввиду того, что это не незнакомое свойство (она известна, но est и # 225; vac и # 237; a), следовательно он не игнорирует ее. Конечный результат добавления @JsonIgnoreProperties (ignoreUnknown = true) не затрагивает ни в чем в этом случае в особенности – Mauricio Campagner 01.11.2016, 15:51

Если это будет, чтобы выдавать контент объекта, содержавшего в "objetoContenido", параметры этого объекта будут null (если он назначен по умолчанию). instanciará, но у него будет стандартная настройка.

В случае, если это будет array Ваша длина будет нулем.

Я надеюсь, что он служит, так как, как я понимаю, Джексон не предотвращает instanciarlo, так как точно строитель верил пусто в (стандартную настройку), и устанавливает стоимость, обнаруженную в JSON, если они есть.

0
ответ дан 24.11.2019, 12:50
  • 1
    В действительности то, в чем я нуждаюсь, что объект не instancie и, что, закончив deserializaci и # 243; n, мой объект " Entidad" имейте Ваши поля пойдите и описание с Вашей соответствующей стоимостью, и что стоимость для поля типа " ObjetoContenido" будьте null. До сих пор не encontr и # 233; способ показывать его Джексону, чем, прочитав JSON и после того, как находиться с " objetoContenido": {} вышеупомянутый объект не instancie для того, чтобы стоимость поля типа " ObjetoContenido" будьте null – Mauricio Campagner 01.11.2016, 19:59