无法通过 repo 删除文档-> 使用 Webflux 在 Spring Boot 2.x 中删除
Posted
技术标签:
【中文标题】无法通过 repo 删除文档-> 使用 Webflux 在 Spring Boot 2.x 中删除【英文标题】:Not able to delete a document by repo--> delete in Spring Boot 2.x with Webflux 【发布时间】:2019-02-19 09:47:03 【问题描述】:我正在使用 Spring Boot 2.0.4.RELEASE、webflux 和 mongodb-reactive,我所有的操作都可以正常工作 POST、GET、PUT,但是删除不起作用。 完整的演示应用源代码可以在这里看到 github.com Source code link
这是我的文档类:
@Document(collection = "users")
public class Employee implements Serializable
@Id
private String id = UUID.randomUUID().toString();
private String firstName;
private String lastName;
private String email;
public String getId()
return id;
public void setId(String id)
this.id = id;
public String getFirstName()
return firstName;
public void setFirstName(String firstName)
this.firstName = firstName;
public String getLastName()
return lastName;
public void setLastName(String lastName)
this.lastName = lastName;
public String getEmail()
return email;
public void setEmail(String email)
this.email = email;
这是我的 DELETE 请求处理方法。方法成功返回 OK(200) 响应,但是当我看到 mongdb 时,记录没有被删除。
public Mono<ServerResponse> deleteAnEmployee(ServerRequest request)
String employeeId = request.pathVariable("id");
return employeeRepository.findById(employeeId)
.flatMap(employee ->
employeeRepository.delete(employee);
return ServerResponse.ok().build();
).switchIfEmpty(ServerResponse.notFound().build());
我在这里遗漏了什么,请建议.pom、路由器、repo 等,请参阅描述中提供的 gihub 链接。
【问题讨论】:
【参考方案1】:您的 delete
未应用,因为它不是反应链的一部分 - 请参阅 this item in the reactor documentation。如果操作未链接,则不会订阅您代码的该部分并且不会执行。
在这种特殊情况下,您必须确保在删除操作完成后返回 OK 响应:
return employeeRepository.delete(employee)
.then(ServerResponse.ok().build());
注意:您的员工存储库有点奇怪,因为它使用 UUID
作为文档的 id,而您似乎在所有其他地方使用 String
。也许您应该在存储库界面上使用String
。
【讨论】:
谢谢知道了,是的,在回购中我忘了更改,谢谢。以上是关于无法通过 repo 删除文档-> 使用 Webflux 在 Spring Boot 2.x 中删除的主要内容,如果未能解决你的问题,请参考以下文章
无法通过 Express 路由从 Mongodb 中删除文档
无法推送到mercurial(bitbucket)repo'等待锁定存储库'