gpt4 book ai didi

java - Spring webflux,mongodb : Document is not saved into database

转载 作者:行者123 更新时间:2023-11-29 07:28:15 24 4
gpt4 key购买 nike

我从 Spring Webflux + MongoDB 中的简单项目开始。

我很难理解为什么这段代码将对象用户保存到数据库中:

@Controller
@RequestMapping("/users")
public class UserController {
@RequestMapping(value="/signup", method = RequestMethod.POST)
@ResponseBody Mono<User> save(@ModelAttribute(value="user") User user){
return reactiveUserRepository.save(user);
}
}
}

当我用这个替换上面的函数时:

@RequestMapping(value="/signup", method = RequestMethod.POST)
String save(@ModelAttribute(value="user") User user){
reactiveUserRepository.save(user);
return "login";
}

文档根本没有存储。

在第一种情况下,日志显示:

2017-11-11 14:20:29.654 DEBUG 2828 --- [ctor-http-nio-2] o.s.d.m.core.ReactiveMongoTemplate       : Inserting Document containing fields: [_class] in collection: users

在第二个例子中根本没有记录。

ReactiveUserRepository 是像这样扩展 ReactiveCrudRepository 的空接口(interface):

@Repository
public interface ReactiveUserRepository extends ReactiveCrudRepository<User, Long> {

}

我明白,我可以使用 MongoRepository 而不是 ReactiveCrudRepository,这会起作用。问题是,为什么将文档保存到数据库中取决于方法返回类型。

最佳答案

没有订阅 Mono<User> (由 .save(user) 返回)在第二个片段中;当没有订阅时, react 器中什么也不会发生。

@RequestMapping(value = "/signup", method = RequestMethod.POST)
String save(@ModelAttribute(value = "user") User user) {
User user = reactiveUserRepository.save(user).block();
return "login";
}

您可以添加 Mono.block() save(user) 返回的 Mono 运算符.这将订阅单声道并等待结果。

在第一个片段中,spring 自动订阅结果,这就是它执行的原因。

关于java - Spring webflux,mongodb : Document is not saved into database,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47238418/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com