Как заставить использование весенней загрузки и вернуть базовый класс в MongoRepository - PullRequest
2 голосов
/ 07 июля 2019

У меня есть базовый класс, как (это искусственный пример):

@Document(collection = "cars")
public class BaseCar implements Serializable
{
private int number; 
private String color;
...
}

Тогда у меня есть производный класс, как:

@Document(collection = "cars")
public class FastCar extends BaseCar implements Serializable
{
private int numberOfWonRaces;
... 
}

Для обоих у меня есть класс MongoRepository:

public interface BaseCarRepository extends MongoRepository<BaseCar, String> {
{ ... }

и

public interface FastCarRepository extends MongoRepository<FastCar, String> {
{ ... }

Если я сейчас сохраню FastCar в MongoDB, я получу дополнительно добавленное поле _class, которое указывает, откуда поступают данные.В этом примере он показывает FastCar.

В моем проекте у меня есть интерфейс REST API для получения автомобилей.Я использую функцию findBy, чтобы получить машину по цвету.Например:

BaseCar baseCar = baseCarRep.findByColor(color);

Даже если я использую объект BaseCar, Springboot обнаруживает, что это FastCar, и возвращает объект FastCar со всей информацией.

Вопрос: Есть ли способ заставить Springboot возвращать только BaseCar?Я не хочу отправлять всю информацию в интерфейс API REST.

Что я уже сделал: Если я удалю поле _class в MongoDB, Springboot не сможет автоматически обнаружитькласс больше и возвращает BaseCar.Но я не хочу терять эту функциональность, заставляя Springboot удалить _class ( Spring data MongoDb: MappingMongoConverter remove _class )

Кажется, что есть также способ с проекциями для фильтрацииполя, которые должны быть возвращены.Для меня это не элегантный способ, так как мне нужно снова записать все поля, и я должен обновить его, как только я обновляю класс BaseCar.

Спасибо за любую помощь.

Philipp

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