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"
}
]