Java反应式程序
我的要求如下 获取将包含apptId的ApptReq对象。从DB中获取Appt对象,并使用ApptReq中的数据更新Appt对象,然后更新表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
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中的代码。不知道为什么它没有被调用。