【发布时间】:2021-10-02 01:40:22
【问题描述】:
我正在尝试使用响应式构建应用程序。最初我曾经得到正确的响应,但是在修改代码后,记录没有持久化到数据库中,但是当我更改逻辑以修改响应正文时,我看到了成功响应,但在数据库中没有找到记录,我也看不到日志中的错误。
修改前的代码:
public Mono<ServerResponse> createCustomer(ServerRequest serverRequest) {
return serverRequest.bodyToMono(Customer.class).flatMap(customer -> {
ServerResponse.ok()
.contentType(MediaType.APPLICATION_JSON)
.body(customerRepository.save(customer), Customer.class);
});
}
但我想为所有 API 调用返回一个通用 API 响应并修改代码如下:
public Mono<ServerResponse> createCustomer(ServerRequest serverRequest) {
Response response = new Response();
return serverRequest.bodyToMono(Customer.class).flatMap(customer -> {
saveCustomer(customer,apiResponse);
return ServerResponse.ok()
.contentType(MediaType.APPLICATION_JSON)
.body(Mono.just(apiResponse), Response.class);
}).doOnError(err -> {
log.error("Exception while creating customr record", err);
}).onErrorResume(err -> {
apiResponse.setError(new Error(err.getMessage(),err.getCause()));
return ServerResponse.status(HttpStatus.INTERNAL_SERVER_ERROR)
.contentType(MediaType.APPLICATION_JSON)
.body(Mono.just(apiResponse), ApiResponse.class);
});
}
public Response saveCustomer(Customer customer,Response apiResponse){
customerRepository.save(customer);
apiResponse.setCode("0");
apiResponse.setMessage("Successfully Created customer");
return apiResponse;
}
任何想法都欢迎。
【问题讨论】:
标签: spring-boot spring-webflux spring-data-r2dbc