Джексон: фильтрация нулевых или пустых значений при преобразовании ответа строки json в преобразование pojo с использованием jackson

Я использую jackson для преобразования ответа jason в список pojo. Ниже приведен ответ, который я получаю.

[

    {
        "code": "",
        "total": 24,
        "name": null
    },
    {
        "code": "",
        "total": 1,
        "name": "Test"
    }
]

И я преобразовываю его в список Pojo. Ниже мой pojo.

public class ItemCategory {

private String code;
private String name;
private String total;

public ItemCategory() {
}

public ItemCategory(final String code, final String name, final String total) {
    super();
    this.code = code;
    this.name = name;
    this.total = total;
}

/**
 * @return the code
 */
public String getCode() {
    return code;
}

/**
 * @param code
 *            the code to set
 */
public void setCode(final String code) {
    this.code = code;
}

/**
 * @return the name
 */
public String getName() {
    return name;
}

/**
 * @param name
 *            the name to set
 */
public void setName(final String name) {
    this.name = name;
}

/**
 * @return the count
 */
public String getTotal() {
    return total;
}

/**
 * @param count
 *            the count to set
 */
public void setTotal(final String total) {
    this.total = total;
}
}

Все работает нормально. Но я хочу удалить значения, которые нужно преобразовать в pojo, код которых имеет пустое/нулевое значение. то есть "код": "", ИЛИ "код": ноль

Я использую приведенный ниже код Джексона для преобразования json в pojo.

Object pojo = null;
try {
    pojo = mapper.readValue(jsonString, typeReference);
} catch (JsonParseException e) {
    throw new InvalidPojoException(e.toString(), e);
} catch (JsonMappingException e) {
    throw new InvalidPojoException(e.toString(), e);
} catch (IOException e) {
    throw new InvalidPojoException(e.toString(), e);
} catch (Exception e) {
    throw new InvalidPojoException(e.toString(), e);
}
return pojo;

Используя приведенный ниже код для json для объекта.

(List<ItemCategory>) JsonParserUtil.toPojo(serviceResponse.getStringResponse(),new TypeReference<List<ItemCategory>>(){});

Любой указатель будет оценен.

Заранее спасибо.


person Tejas Kanani    schedule 27.11.2012    source источник
comment
не могли бы вы установить ответ как принятый? Благодарность :)   -  person Michal M    schedule 23.12.2020


Ответы (1)


Вы, вероятно, захотите аннотировать свой класс компонента следующим образом:

@JsonSerialize(
include=JsonSerialize.Inclusion.NON_NULL,
)

источник: JsonSerialize аннотация javadoc

person Michal M    schedule 29.11.2012
comment
Спасибо Михал за ответ. Просто чтобы уточнить, будет ли просто удалить весь набор свойств, в которых он имеет нулевое значение. Допустим, из упомянутого ответа на мой вопрос окончательный сериализованный список «ItemCategory» не должен включать первый объект с общим количеством: 24, поскольку он имеет код со значением empty (). Таким образом, в списке будет только набор объектов, которые не имеют значения null/blank для кода. И другой набор, который я не хочу сериализовать в ItemCategory pojo. Поэтому я не хочу удалять само свойство кода, а весь набор, который имеет нулевое/пустое значение для кода. - person Tejas Kanani; 30.11.2012
comment
Я так не думаю, нет, потому что при простой проверке на нуль сами элементы списка не будут нулевыми. Поскольку это немного более сложный случай, вам, вероятно, следует создать свой собственный сериализатор для объекта списка (я не думаю, что сериализатора для самого класса ItemCategory будет достаточно). - person Michal M; 30.11.2012
comment
Спасибо Михал. Это дает мне некоторое направление для движения вперед. - person Tejas Kanani; 05.12.2012