У меня есть несколько RESTful WS, созданных с помощью Spring Boot, и один из методов конечной точки возвращает экземпляр некоторого класса, который затем будет преобразован в JSON с использованием встроенной библиотеки Джексона. Джексон преобразует в JSON каждое поле, даже если некоторые поля имеют значение NULL. На выходе это будет выглядеть так:
{
"field1": "res1",
"field2": "res2",
"field3": null
}
Я хочу проигнорировать какое-то поле при выводе в определенных случаях. Не всегда, в некоторых случаях. Как это сделать?




Вверху вашего класса добавьте аннотацию NON_NULL Джексона, чтобы игнорировать нулевые значения при получении или отправке
@JsonInclude(value = Include.NON_NULL)
public class SomeClass {
}
Чтобы подавить сериализацию свойств с нулевыми значениями с помощью Jackson> 2.0, вы можете настроить ObjectMapper напрямую или использовать аннотацию @JsonInclude:
mapper.setSerializationInclusion(Include.NON_NULL);
или:
@JsonInclude(Include.NON_NULL)
class Foo
{
String field1;
String field2;
String field3;
}
В качестве альтернативы вы можете использовать @JsonInclude в геттере, чтобы атрибут отображался, если значение не равно нулю.
Полный пример доступен на Как предотвратить сериализацию нулевых значений внутри карты и нулевых полей внутри компонента через Джексон
Чтобы исключить нулевые значения, вы можете использовать
@JsonInclude(value = Include.NON_NULL)
public class YourClass {
}
А чтобы включить индивидуальные значения, вы можете использовать
public class Employee {
private String name;
@JsonInclude(value = JsonInclude.Include.CUSTOM, valueFilter = DateOfBirthFilter.class)
private Date dateOfBirth;
@JsonInclude(content = JsonInclude.Include.CUSTOM, contentFilter = PhoneFilter.class)
private Map<String, String> phones;
}
public class DateOfBirthFilter {
@Override
public boolean equals(Object obj) {
if (obj == null || !(obj instanceof Date)) {
return false;
}
//date should be in the past
Date date = (Date) obj;
return !date.before(new Date());
}
}
public class PhoneFilter {
private static Pattern phonePattern = Pattern.compile("\\d{3}-\\d{3}-\\d{4}");
@Override
public boolean equals(Object obj) {
if (obj == null || !(obj instanceof String)) {
return false;
}
//phone must match the regex pattern
return !phonePattern.matcher(obj.toString()).matches();
}
}
Взял ссылку из https://www.logicbig.com/tutorials/misc/jackson/json-include-customized.html
поставил
@JsonInclude(Include.NON_NULL)на класс