我需要编写Spring Webflux端点(路由器函数),以便向一组邮件接收者发送电子邮件。用户界面将选择邮件接收者列表并将其发送到我编写的API。我希望实现这个端点的方式是,一旦我收到请求,就立即向用户界面发送响应,表示正在发送电子邮件。发送响应后,我应该继续异步进行邮件发送工作。我不能像在Spring MVC中使用@async注释一样使用它,因为在反应式世界中,这是反模式。
由于我正在使用Spring Webflux开发API,我应该如何发送响应?
我的代码中有以下结构:
Router.java
由于我正在使用Spring Webflux开发API,我应该如何发送响应?
我的代码中有以下结构:
Router.java
@Bean
public RouterFunction<ServerResponse> sendEmail() {
return route(POST("/email").and(accept(APPLICATION_JSON)), handler::sendEmail);
}
Handler.java
@Autowired
EmailService emailService;
public Mono<ServerResponse> sendEmail(ServerRequest request) {
Mono<PojoA> pojoAMono = request.bodyToMono(PojoA.class);
return pojoAMono.flatMap(pojoA -> {
return emailService.sendEmail(pojoA).flatMap(mailSent -> {
return ServerResponse
.status(HttpStatus.OK)
.contentType(MediaType.APPLICATION_JSON)
.body("Mails are being sent", String.class));
});
});
}