无法通过 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'等待锁定存储库'

word文档中backspace键无法删除选中文字

Maven 无法使用 Central repo 解决依赖关系

SVN repo损坏了

Subversion repo 升级使存储库无法使用