Spring Webflux 功能数据库更新不起作用
Posted
技术标签:
【中文标题】Spring Webflux 功能数据库更新不起作用【英文标题】:Spring Webflux functional db update does not work 【发布时间】:2020-03-16 10:12:44 【问题描述】:我正在使用带有响应式 mongodb 的 spring webflux (SpringBoot 2.1.9)。我的 build.gradle 的一部分在这里
implementation 'org.springframework.boot:spring-boot-starter-data-mongodb-reactive'
implementation 'org.springframework.boot:spring-boot-starter-webflux'
对于我的 CRUD 操作,创建和删除作品。更新方法不会引发异常,但内容不会保存在数据库中。我做错了什么?
MyHandler.java
public Mono<ServerResponse> update(ServerRequest request)
return request.bodyToMono(ListAndReview.class).
flatMap( update ->
return listAndReviewRepo.findById(update.id).flatMap( previous ->
previous.name = update.name;
previous.description = update.description;
return ServerResponse.ok().contentType(MediaType.APPLICATION_JSON).body(fromObject(listAndReviewRepo.save(previous)));
);
).
switchIfEmpty(ServerResponse.notFound().build());
【问题讨论】:
您能否尝试在您的listAndReviewRepo
中使用@Transactional
注释您的findById
方法
添加@Transactional 没有解决问题。
【参考方案1】:
把代码改成
public Mono<ServerResponse> update(ServerRequest request)
return request.bodyToMono(ListAndReview.class).
flatMap( update ->
return listAndReviewRepo.findById(update.id).flatMap( previous ->
previous.name = update.name;
previous.description = update.description;
return listAndReviewRepo.save(previous)
.map(saved -> ServerResponse.ok().contentType(MediaType.APPLICATION_JSON).body(fromObject(saved));
);
).
switchIfEmpty(ServerResponse.notFound().build());
【讨论】:
.map(saved -> ServerResponse.ok().contentType(MediaType.APPLICATION_JSON).body(fromObject(saved))
中缺少一个右括号,但即使我添加了代码也无法编译。编译错误是code
error: 不兼容的类型:Monocode
以上是关于Spring Webflux 功能数据库更新不起作用的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot WebFlux NettyServerCustomizer 不起作用
spring 5 webflux 功能端点请求中不存在访问控制源头
使用 spring webflux 替代 @Cacheable
使用 Spring boot + WebFlux 进行全局错误处理
Spring Boot (十四): 响应式编程以及 Spring Boot Webflux 快速入门
使用 Spring Boot WebFlux、Spring Data MongoDB Reactive 和 ReactiveMongoRepository 更新 1 个或多个特定字段 MongoDB