Java反应式程序

Java反应式程序,java,reactive-programming,spring-webflux,project-reactor,Java,Reactive Programming,Spring Webflux,Project Reactor,我的要求如下 获取将包含apptId的ApptReq对象。从DB中获取Appt对象,并使用ApptReq中的数据更新Appt对象,然后更新表 Mono<User> monoUser = retrieveUser(); public Mono<ServerResponse> updateAppt(ServerRequest request) { return apptRepository.findById(request.bodyToMono(ApptRe

我的要求如下

获取将包含apptId的ApptReq对象。从DB中获取Appt对象,并使用ApptReq中的数据更新Appt对象,然后更新表

Mono<User> monoUser = retrieveUser();

public Mono<ServerResponse> updateAppt(ServerRequest request) {
        return apptRepository.findById(request.bodyToMono(ApptReq.class).map(ApptReq::getApptId)).flatMap(appt -> {
            return updateAppt(appt, request.bodyToMono(ApptReq.class)).flatMap(apptRepository::save).flatMap(
                    res -> ServerResponse.created(URI.create(String.format(APPT_URI_FORMAT, res.getApptId()))).build());
        });
    }



private Mono<Appt> updateAppt(Appt appt, Mono<ApptReq> apptReq) {

    return apptReq.map(req -> {
        appt.setNotes(req.getNotes());
        

        return monoUser.map((usr) -> {
            appt.setUpdatedBy(usr.getUserId());
            return appt;
        });
    });

}
Mono monoUser=retrieveUser();
公共Mono updateAppt(服务器请求){
返回apptRepository.findById(request.bodytomino(ApptReq.class).map(ApptReq::getApptId)).flatMap(appt->{
返回updateapt(appt,request.bodytomino(ApptReq.class)).flatMap(apptRepository::save).flatMap(
res->ServerResponse.created(URI.create(String.format(APPT\u URI\u format,res.getApptId())).build());
});
}
专用Mono updateAppt(应用程序应用程序,Mono应用程序){
返回apptReq.map(请求->{
appt.setNotes(req.getNotes());
返回单用户.map((usr)->{
appt.setUpdatedBy(usr.getUserId());
返回应用程序;
});
});
}
这里获取updateAppt方法中的错误

无法从单声道转换为单声道


有更好的方法吗?

你差不多找到了。我没有更改您的
updateapt(ServerRequest-request)
方法,只是对您的
updateapt(Appt-Appt,Mono-apptReq)
方法做了一点小小的调整,如下所示:

    private Mono<Appt> updateAppt(Appt appt, Mono<ApptReq> apptReq) {

        return apptReq.flatMap(req -> {
            appt.setNotes(req.getNotes());


            return retrieveUser().map((usr) -> {
                appt.setUpdatedBy(usr.getUserId());
                return appt;
            });
        });

    }
private Mono updateapt(Appt-Appt,Mono-apptReq){
返回apptReq.flatMap(请求->{
appt.setNotes(req.getNotes());
return retrieveUser().map((usr)->{
appt.setUpdatedBy(usr.getUserId());
返回应用程序;
});
});
}
注意
apptReq.flatMap
而不是你的
apptReq.map
,一切正常。试试看


提醒:小心其他
Mono
s或更一般地说是嵌套
Publisher
s中的嵌套
Mono
s。

。我没有更改您的
updateapt(ServerRequest-request)
方法,只是对您的
updateapt(Appt-Appt,Mono-apptReq)
方法做了一点小小的调整,如下所示:

    private Mono<Appt> updateAppt(Appt appt, Mono<ApptReq> apptReq) {

        return apptReq.flatMap(req -> {
            appt.setNotes(req.getNotes());


            return retrieveUser().map((usr) -> {
                appt.setUpdatedBy(usr.getUserId());
                return appt;
            });
        });

    }
private Mono updateapt(Appt-Appt,Mono-apptReq){
返回apptReq.flatMap(请求->{
appt.setNotes(req.getNotes());
return retrieveUser().map((usr)->{
appt.setUpdatedBy(usr.getUserId());
返回应用程序;
});
});
}
注意
apptReq.flatMap
而不是你的
apptReq.map
,一切正常。试试看


提醒:小心其他
Mono
s中的嵌套
Mono
s或更一般地说嵌套
Publisher
s中的嵌套
s。

响应后,将id和基本对象放在一个文件夹中,并将其与示例一起传递,请将其与反应式混淆。如果您需要代码示例,我没有时间编写您的代码,那就得有人来回答了。祝你好运。在回复后,请将id和baseobject放在一个文件夹中,并将其与示例一起传递,我仍然与反应混淆。我没有时间编写你的代码,如果你需要代码示例,那么其他人将不得不回答。祝你好运,这很有效。我会接受的。只是想知道没有嵌套Mono的最佳方法?没有嵌套Mono的好吗?老实说,我不相信有这样的方法,只要你想在所有的中间步骤中保持完全的反应。我会考虑一下,如果我有什么想法,我会回到你身边。:-)正在调用updateAppt方法,但未调用apptReq.flatMap中的代码。不知道为什么它没有被调用。这是有效的。我会接受的。只是想知道没有嵌套Mono的最佳方法?没有嵌套Mono的好吗?老实说,我不相信有这样的方法,只要你想在所有的中间步骤中保持完全的反应。我会考虑一下,如果我有什么想法,我会回到你身边。:-)正在调用updateAppt方法,但未调用apptReq.flatMap中的代码。不知道为什么它没有被调用。