Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring WebClient调用两个相关API_Java_Spring_Spring Webflux_Spring Webclient - Fatal编程技术网

Java Spring WebClient调用两个相关API

Java Spring WebClient调用两个相关API,java,spring,spring-webflux,spring-webclient,Java,Spring,Spring Webflux,Spring Webclient,我有两个端点,第一个是http://localhost:8899/api/composition/appraisal,它将返回所有绩效评估数据 [ { "appraisalId": "ac234fbf-740c-4390-89d4-0e9753ad4d70", "employeeId": "emp-4613", "grade": "VERY_GOOD", "score": 94, "status": "NEW

我有两个端点,第一个是
http://localhost:8899/api/composition/appraisal
,它将返回所有绩效评估数据

[
    {
        "appraisalId": "ac234fbf-740c-4390-89d4-0e9753ad4d70",
        "employeeId": "emp-4613",
        "grade": "VERY_GOOD",
        "score": 94,
        "status": "NEW"
    },
    {
        "appraisalId": "e9baf663-aa6e-4af8-ae16-ef50c886df28",
        "employeeId": "emp-4623",
        "grade": "VERY_GOOD",
        "score": 94,
        "status": "NEW"
    }
]
我还有另一个端点来获取奖金数据
http://localhost:8888/api/composition/bonus/{evaluation_id}
根据评估id返回奖金数据

{
    "appraisalId": "ac234fbf-740c-4390-89d4-0e9753ad4d70",
    "bonusAmount": 4760.0,
    "bonusPaidDate": "2019-06-30",
    "employeeId": "emp-4623",
    "paidToBankAccount": "8240996587"
}
将来自第一个API的评估id作为参数,我必须将两个API调用的结果合并到PerformanceApprovalWithBonus.java类中

公开课绩效考核带奖金{
私人UUID评估;
私人双骨山;
私有LocalDate-bonusPaidDate;
私有字符串employeeId;
私家弦级;
个人智力得分;
私有字符串状态;
能手/二传手
}

如何使用Spring WebClient实现这一点?

假设第二个api
http://localhost:8888/api/composition/bonus/{evaluation_id}
在找不到或不存在id时不回复204任何内容,并假定预期的响应是一个PerformanceApparsalWithBonus(流量)列表 那么它看起来是这样的:

网络客户

@组件
公共类测试客户端{
公共服务列表(){
返回WebClient.create()
.get()
.uri(“http://demo4307830.mockable.io/first")
.accept(MediaType.APPLICATION_JSON)
.retrieve()
.bodyToFlux(评估等级);
}
公共服务FINDID(UUID UUID){
返回WebClient.create()
.get()
.uri(“http://demo4307830.mockable.io/“+uuid)
.accept(MediaType.APPLICATION_JSON)
.retrieve()
.bodyToMono(评估奖金类);
}
}
服务

@服务
公共类评估服务MPL{
@自动连线
私有测试客户端;
公共流量组合{
返回testClient.firstServiceList()
.flatMap(evaluation->testClient.firstServiceFindId(evaluation.getevaluvalid())
.flatMap(evaluationalbonus->Mono.just(evaluationalCombine.builder())
.evaluvalid(evaluvalbonus.getevaluvalid())
.bonusAmount(evaluationbonus.getBonusAmount())
.bonusPaidDate(evaluation bonus.getBonusPaidDate())
.employeeId(evaluationBonus.getEmployeeId())
.grade(evaluation.getGrade())
.score(evaluation.getScore())
.status(evaluation.getStatus())
.build());
}
}
控制器

@RestController
@请求映射(“/evaluation”)
公共类评估控制器{
@自动连线
评估服务MPL评估服务;
@GetMapping(value=“/get”)
公共流量上传简单(){
返回evaluationservice.combineTwo();
}
}
结果

[
    {
        "appraisalId": "ac234fbf-740c-4390-89d4-0e9753ad4d70",
        "bonusAmount": 4760.0,
        "bonusPaidDate": "2019-06-30",
        "employeeId": "emp-4623",
        "grade": "VERY_GOOD",
        "score": 94,
        "status": "NEW"
    }
]