0

我想编写第一个程序webFluxReactiveMongoRepository. 我有存储库:

@Repository
public interface personRepository extends ReactiveMongoRepository<Person,String> {
        Mono<Person> save(Person person);
}

我的服务:

@AllArgsConstructor
@Service
public class personServiceImpl implements personService{

    personRepository repository;

    @Override
    public Flux<Person> findAll() {
        return repository.findAll();
    }

    @Override
    public Mono<Person> saveOrUpdate(Person person) {
        CompletableFuture<Person> future = CompletableFuture.supplyAsync(() -> {

            repository.save(person);
            return person;
        });
        return Mono.fromFuture(future);
    }

}

其余的服务本身:

@RestController
@AllArgsConstructor
public class personController {
    personServiceImpl personService;

    @GetMapping("/all")
    Flux<Person> getAllPerson(){
        return personService.findAll();
    }

    @PostMapping("/save")
    public Mono<Person> post(@RequestBody Person user) {
        System.out.println("inside***************");
        return personService.saveOrUpdate(user);
    }
}

现在,当我想测试服务并通过邮递员保存或查找每个人时,我收到一个错误:

"path": "/all",
"status": 405,
"error": "Method Not Allowed",

也就是按照我的理解,请求甚至没有到达函数,而是立即抛出错误,这里哪里有错误呢?

在此处输入图像描述

在此处输入图像描述

4

1 回答 1

1

问题似乎在saveOrUpdate()方法中。您实际上并不需要CompletableFuture(在这种情况下您为什么要这样做?)并且以下内容应该可以工作:

@AllArgsConstructor
@Service
public class personServiceImpl implements personService{

    personRepository repository;

    @Override
    public Flux<Person> findAll() {
        return repository.findAll();
    }

    @Override
    public Mono<Person> saveOrUpdate(Person person) {
        return repository.save(person);
    }
}
于 2021-12-11T17:30:37.940 回答