У меня есть вопрос. Допустим, у нас есть объект Hotel. Этот объект содержит, например, id, имя, ссылка на объект Country, путь к фотографии темы и список других фото патчей.
Я использую Spring boot JPA + jackson. Итак, репозитории похожи на ...
@Repository
public interface HotelRepository extends CrudRepository<HotelEntity, Long> {
List<HotelEntity> findTop3ByCountryOrderByPriorityDesc(CountryEntity country);
}
Есть ли возможность аннотировать поля объекта с помощью какого-нибудь джексона, чтобы сообщить Spring boot: «Эй, если вы используете этот метод репозитория (например, метод findTop3ByCountryOrderByPriorityDesc), возьмите только имя, идентификатор и фотографию темы. (И этот подход будет использоваться во всех сущностях и методах). Что-то типа
@JsonSerializeClasses({"top3Hotels", "hotels"})
String name;
И использование в репозиториях
@JsonSerializeClassesUsage({top3Hotels})
List<HotelEntity> findTop3ByCountryOrderByPriorityDesc(CountryEntitycountry);
(Этот метод вернет список объектов отеля, содержащий только названия).
Примечание: это может работать и «негативно». Поэтому, если я аннотирую какое-либо поле с помощью некоторого «класса в классе», это поле не будет включено в объект, возвращаемый методом, в аннотацию которого не включен этот «внутренний класс».
Возможно ли это в данных Spring с джексоном?
Или мне действительно нужно возвращать объекты, и в случаях, когда мне не нужны какие-то свойства, я должен перебирать их и вручную "обнулять"?
Спасибо.
Используйте прогнозы, как объяснено здесь в справочном руководстве.
Насколько я знаю, это невозможно сделать автоматически. Я могу предложить вам создать собственный собственный запрос, в котором вы можете взять только необходимые поля и отменить их в настраиваемом объекте DTO. Таким образом, вы создали указанный метод в вашем JPARepository. Этот метод может извлекать только те поля, которые вам нужны, и своевременно их сериализовать.