У меня есть объект, у которого есть атрибут в конструкторе, который создается динамически в зависимости от другого объекта, в который он входит.
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"
}
Спасибо