#java #spring-boot #rest
Вопрос:
У меня есть интерфейс REST, который получает данные электронной почты. Эти почтовые данные будут отправлены на указанный почтовый адрес. После успешной отправки почты я также хочу отправить почтовый запрос Webclient в другую службу(это не часть вопроса, но просто для того, чтобы дать вам представление о том, что я планирую, и я еще не закончил с этой частью). Что происходит прямо сейчас, так это то, что выполняется полный код, а затем отправляется HTTP-ответ для СОЗДАННОГО. Я этого не хочу, я хочу немедленно отправить HTTP-ответ для СОЗДАННОГО, а затем выполнить остальную часть кода.
@PostMapping
@ResponseStatus(HttpStatus.CREATED) // Should be send immediatly back
private void receiveMailData(@RequestBody MailData mailData) throws IOException, MessagingException {
sendService.sendMail(mailData)
}
А вот и sendMail-Метод
public void sendMail(MailData mailData) throws MessagingException, IOException {
MimeMessage message = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom("****");
helper.setTo("****");
helper.setSubject("*****");
helper.setText("****",false);
javaMailSender.send(message);
webClientService.sendAnswerToWebService(new ResponseMailData("IDofRequest","SUCCEEDED"));
}
Также здесь приведен код Webclientservice(еще не закончен, это просто для того, чтобы дать вам общее представление)
@Service
public class WebClientService {
private final WebClient webClient;
public WebClientService(WebClient.Builder webClientBuilder) {
this.webClient = webClientBuilder
.baseUrl("http://localhost:8084")
.build();
}
public void sendAnswerToWebService(ResponseMailData responseMailData){
// Here comes the Webclient POST-Request not done yet
}
}
Я немного упростил его, но это общая идея. Я подумал, может быть, я смогу решить эту проблему с помощью EventListener или я могу работать здесь с Mono или Flux? У меня еще нет такого опыта с весной. Каков был бы правильный подход?