这是我的代码中的以下流程:用户调用创建代理端点,包含代理名称和布尔字段->
路由器函数接收调用,传递给处理程序->
处理程序将请求正文转换为单声道,将该单声道传递给服务->
Service 将代理保存到 DB,在此过程中生成一个 ID,然后创建一个 Response 对象,其中包含包装在 Mono 中的 ID,将 Response 返回给 Handler。
这是我卡住的部分。保持反应式方法,我必须将代理保存到 Db 并在 Mono 的“doOnNext() 部分中创建 ID。但是,我无法返回从 DB 获取的 ID 以创建响应对象。
实现此目的的反应方式是什么?提前致谢!
public RouterFunction<ServerResponse> createAgency() {
return RouterFunctions
.route(POST("/agency").and(accept(MediaType.APPLICATION_JSON)), handler::createAgency);
}
@Component
@AllArgsConstructor
public class AgencyHandler {
private final AgencyServiceImpl service;
@NonNull
public Mono<ServerResponse> createAgency(ServerRequest request){
Mono<CreateAgencyRequest> agency = request.bodyToMono(CreateAgencyRequest.class);
Mono<CreateAgencyResponse> response = service.createAgency(agency);
return ServerResponse.created(URI.create("/agency"))
.contentType(MediaType.APPLICATION_JSON)
.body(response, CreateAgencyResponse.class);
}
}
@Service
@AllArgsConstructor
public class AgencyServiceImpl implements AgencyService {
private final AgencyRepository agencyRepository;
private final UuidGenerator uuidGenerator;
public Mono<CreateAgencyResponse> createAgency(Mono<CreateAgencyRequest> request) {
UUID id;
request.doOnNext(agency -> {
UUID agencyId = uuidGenerator.getUUID();
Mono<Agency> newAgency = Mono.just(
new Agency(
agencyId,
agency.getFields().getName()
));
//repository.save(newAgency)
//return Mono.just(new CreateAgencyResponse(new CreateAgencyResponseData(agencyId.toString())));
});
// return request
return Mono.just(new CreateAgencyResponse(new CreateAgencyResponseData(agencyId.toString())));
}
}