У меня есть простой контроллер отдыха (использующий Spring web-FLUX), который получает bean-компонент для сохранения в базе данных. Но, как обычно, я хотел бы проверить некоторые поля перед сохранением.
У меня есть метод проверки, который нужно вызвать перед сохранением компонента. Но как я могу сделать это более функциональным (и подходящим) образом?
Я пробовал что-то вроде:
public void save(Mono<MyBean> myBean) {
myBean.map(this::validateBean).map(myRepository::save)
}
Но метод validateBean не вызывается, только когда я делаю что-то вроде
public void save(Mono<MyBean> myBean) {
myBean.map(this::validateBean)
.map(myRepository::save)
.subscribe();
}
Я не знаю, является ли часть subscribe наиболее правильной (я думаю, что это не так), но я думаю, что это работает, потому что это своего рода терминальная операция. Я прав?
Тем не менее, это не решает мою проблему, потому что мой метод проверки выдает BusinessException, когда с компонентом что-то не так. И это именно то, что я хочу сделать.
[ОТРЕДАКТИРОВАНО] Это мой контроллер отдыха, я бы хотел что-то вроде:
@PostMapping(value = "/something")
public Mono<ResponseEntity> salvar(@RequestBody MyBean myBean) {
return myService.salvar(myBean)
.map(RestResponses::ok)
.defaultIfEmpty(RestResponses.empty());
}
Я знаю, что это не работает, потому что мой сервис ничего не возвращает. Но я не знаю, как будет правильно. Поэтому я просто публикую идею. Спасибо за понимание...
Не могли бы вы, ребята, помочь мне?
Mono<Void>
при сохранении данных. Обратите внимание, что подписка на издателя обычно пахнет. - person Brian Clozel   schedule 03.06.2017Mono<Void> save(MyBean myBean)
- person Brian Clozel   schedule 06.06.2017