Spring boot - установить динамическое свойство при создании - PullRequest
0 голосов
/ 14 ноября 2018

У меня есть объект, у которого есть атрибут в конструкторе, который создается динамически в зависимости от другого объекта, в который он входит.

    public Booking(Customer customer, Barber barber, LocalDateTime startTime, Service service) {
    this.customer = customer;
    this.barber = barber;
    this.startTime = startTime;
    this.service = service;
    this.endTime = null;
    this.calculateEndTime();
}

    public void calculateEndTime(){
    int duration = this.service.getDuration();
    this.setEndTime(this.startTime.plusMinutes(duration));
}

Когда я заполняю данные через загрузчик данных, который реализует ApplicationRunner, мои заказы создаются с помощьюконец времени.Однако, когда я публикую новое бронирование через бессонницу, эта calculateEndTime() функция не запускается, мой endTime остается как null.

Насколько я понимаю, это из-за весны, смотрящей на пустое значение по умолчаниюконструктор и сеттеры для создания нового объекта.

Итак, мой вопрос: почему он работает через загрузчик данных и как я могу получить его для генерации через публикацию нового бронирования через интерфейс / бессонницу?

Я пытался вызвать эту функцию в установщике endTime, но это не работает.

Пример просеянных данных через загрузчик данных:

@Component
public class DataLoader implements ApplicationRunner {

@Autowired
BarberRepository barberRepository;

@Autowired
CustomerRepository customerRepository;

@Autowired
BookingRepository bookingRepository;


@Autowired
ServiceRepository serviceRepository;


public DataLoader() {

}

public void run(ApplicationArguments args) {

Service beardTrim = new Service("Beard Trim", 5.00, 10);
serviceRepository.save(beardTrim);

Barber alan = new Barber("Alan");
barberRepository.save(alan);

Customer customer1 = new Customer("Joe");
customerRepository.save(customer1);

LocalDateTime startTime = LocalDateTime.of(2018, Month.NOVEMBER, 5, 12, 00);

Booking booking1 = new Booking(customer1, alan, startTime, beardTrim);
bookingRepository.save(booking1);

}

Пример данных, которые я пытаюсьнаписать через Бессонницу:

{
"startTime": "2018-11-12T09:00",
"barber": "http://localhost:8080/api/barbers/1",
"service": "http://localhost:8080/api/services/1",
"customer": "http://localhost:8080/api/customers/1"
}

Спасибо

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Более короткое решение этой проблемы, а не написание пользовательского пострута, заключается в использовании аннотации @prePersist.

Моя пользовательская запись из строки 70odd была сокращена до оператора if, используемого с @ prePersist.

0 голосов
/ 15 ноября 2018

Ответом было написать собственный маршрут сообщения, в котором calculateEndTime() может быть вызван для объекта перед его сохранением.

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