Вот еще один подход:
Предположение 1: я считаю, что лучше определить тип возвращаемого контроллера как объект домена, и пусть Spring будет самостоятельно заниматься преобразованием его в JSON (в отличие от ответа @Alexander Pavlov)). IMO лучше для общей читабельности кода и для таких инструментов, как swagger, который анализирует контроллер и должен знать, что должно быть возвращено.
Предположение 2. У вас нет примитивов в вашем классе User.
Хорошо, теперь контроллер, очевидно, вызывает некоторую «службу», которая делает некоторые запросы к БД, или вообще выполняет некоторую логику, которая в конечном итоге создает список пользователей (список, который вы возвращаете клиенту). Возвращаемый объект должен выглядеть примерно так:
class Users {
private List<User> data;
}
class User { // + constructors, getters, setters, etc.
private String name;
private String city;
private String phone;
private String country;
}
В этом случае в сервисе вы можете поместить «null» в поле, которое вы не хотите возвращать:
User user = new User("John", "LA", null, null); // you only have name and city
Сейчасвы можете поместить аннотацию @JsonInclude(Include.NON_NULL)
в классе User
, и это будет указывать Джексону вообще не включать поля, имеющие значение 'null', в сериализованный ответ.
Если вы хотите, чтобы это поведение применялось глобально,Вы можете настроить ObjectMapper
bean:
ObjectMapper mapper = new ObjectMapper();
mapper.setSerializationInclusion(Include.NON_NULL);