Невозможно удалить документ с помощью репо -> удалить в Spring Boot 2.x с Webflux - PullRequest
0 голосов
/ 14 сентября 2018

Я использую Spring Boot 2.0.4.RELEASE, webflux и mongodb -active, все мои операции работают нормально POST, GET, PUT, но удаление не работает.Полный исходный код демонстрационного приложения можно посмотреть здесь: github.com Ссылка на исходный код

. Вот мой класс документа:

@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 request.method успешно возвращает ответ 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, router, repo, и т.д., пожалуйста,см. ссылку на gihub, приведенную в описании.

1 Ответ

0 голосов
/ 17 сентября 2018

Ваш delete не применяется, поскольку он не является частью реактивной цепи - см. этот пункт в документации реактора .Если операции не связаны, ничего не будет подписано на эту часть вашего кода, и она не будет выполнена.

В этом конкретном случае вы должны убедиться, что ответ OK возвращен после завершения операции удаления.:

                return employeeRepository.delete(employee)
                           .then(ServerResponse.ok().build());

Примечание: ваш репозиторий для сотрудников немного странный, поскольку он использует UUID в качестве идентификатора для документов, тогда как вы, похоже, используете String во всех других местах.Возможно, вам следует использовать String вместо этого в интерфейсе репозитория.

...