使用反应式存储库保存 Mono
Save Mono with reactive repository
我尝试实现一个反应式端点来保存新的实体实例:
在 SubjectRepository
中保存的方法仍然需要 Subject
,没有 Mono
包装器。但是如何从反应式包装器中提取价值并不清楚。
我应该用 request.body(BodyExtractor)
从 Mono<Subject>
中提取 Subject
并调用 SubjectRepository.save(Subject s)
吗?或者我可以以某种方式将 Mono<>
直接保存到 MongoDB?
这是使用输入正文的正确方法吗?
实体:
@Document
public record Subject(@Id UUID id, String route) {}
@Repository
public interface SubjectRepository extends ReactiveMongoRepository<Subject, UUID> {
}
处理程序方法:
@NotNull
public Mono<ServerResponse> createSubject(@NotNull ServerRequest request) {
Mono<Subject> data = subjectRepository
.save(/** Somehow extract Subject from request */);
return ServerResponse
.ok()
.contentType(MediaType.APPLICATION_JSON)
.body(data, Subject.class);
}
您需要使用将在网络流量订阅此流时执行的反应性运算符来收缩流。在这种情况下,使用 request.bodyToMono
来解析请求体,然后继续构建 ServerResponse
public Mono<ServerResponse> createSubject(ServerRequest request) {
return request.bodyToMono(Subject.class)
.flatMap(subject -> subjectRepository.save(subject))
.flatMap(newSubject ->
ServerResponse.ok()
.contentType(MediaType.APPLICATION_JSON)
.bodyValue(newSubject)
);
}
我尝试实现一个反应式端点来保存新的实体实例:
在 SubjectRepository
中保存的方法仍然需要 Subject
,没有 Mono
包装器。但是如何从反应式包装器中提取价值并不清楚。
我应该用 request.body(BodyExtractor)
从 Mono<Subject>
中提取 Subject
并调用 SubjectRepository.save(Subject s)
吗?或者我可以以某种方式将 Mono<>
直接保存到 MongoDB?
这是使用输入正文的正确方法吗?
实体:
@Document
public record Subject(@Id UUID id, String route) {}
@Repository
public interface SubjectRepository extends ReactiveMongoRepository<Subject, UUID> {
}
处理程序方法:
@NotNull
public Mono<ServerResponse> createSubject(@NotNull ServerRequest request) {
Mono<Subject> data = subjectRepository
.save(/** Somehow extract Subject from request */);
return ServerResponse
.ok()
.contentType(MediaType.APPLICATION_JSON)
.body(data, Subject.class);
}
您需要使用将在网络流量订阅此流时执行的反应性运算符来收缩流。在这种情况下,使用 request.bodyToMono
来解析请求体,然后继续构建 ServerResponse
public Mono<ServerResponse> createSubject(ServerRequest request) {
return request.bodyToMono(Subject.class)
.flatMap(subject -> subjectRepository.save(subject))
.flatMap(newSubject ->
ServerResponse.ok()
.contentType(MediaType.APPLICATION_JSON)
.bodyValue(newSubject)
);
}