java 使用React式存储库保存Mono

sd2nnvve  于 2022-12-17  发布在  Java
关注(0)|答案(1)|浏览(161)

我尝试实现一个React式端点来保存新的实体示例:
方法保存在SubjectRepository中仍然需要Subject而没有Mono Package 器。但是如何从React式 Package 器中提取值并不清楚。
我应该用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);
}
fykwrbwg

fykwrbwg1#

您需要使用React式操作符来构造流,当web flux订阅此流时将执行这些操作符。在这种情况下,使用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)
                );
}

相关问题