版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m18633778874/article/details/88524853
前言
小编最近需要调用外服务的一个接口,便需要外服务的api层去开放端口,并且本服务中用到了IntegralResult的结果封装体返回值的处理,通过Json转换处理。
两个服务代码实现
一、外服务开放端口
1.api层的代码
package com.dmsdbj.integral.kernel.api.facade; // 包路径
import com.dmsdbj.cloud.tool.business.IntegralResult;
import org.springframework.cloud.openfeign.FeignClient; // 注册服务发现的注解
....
@FeignClient(value = "INTEGRAL-KERNEL-PROVIDER", path = "/kernel-web",fallback = IntegralClientException.class)
public interface IntegralDetailClientService {
...
/**
* 查询全勤奖励加分记录
* @author 冯浩月
* @param userId
* @param date
* @return
* @since 2019年3月12日16:12:56
*/
@GetMapping(value = {"/api/integralDetail/findByUserIdDate/{userId}/{date}"})
IntegralResult findByUserIdDate(@PathVariable(value="userId") String userId,
@PathVariable(value="date") String date);
}
2.provider层 实现api层的接口
package com.dmsdbj.integral.kernel.provider.controller.api;/**
@Controller
@Api(tags = {"外部积分详情接口"})
@RestController
@Slf4j
@RequestMapping(value = {"/api/integralDetail"})
public class ApiIntegralDetailController implements IntegralDetailClientService {
...
*
* @param userId
* @param date
* @return
* @author 冯浩月
* @since 2019年3月12日16:12:56
*/
@ApiOperation(value = "查询全勤奖励加分记录")
@GetMapping(value = {"/findByUserIdDate/{userId}/{date}"})
@Override
public IntegralResult<List<IntegralDetailModel>> findByUserIdDate(@PathVariable(value = "userId") String userId, @PathVariable(value = "date") String date) {
if (integralDetailService.findByUserIdDate(userId, date).size() == 0) {
return IntegralResult.build(IntegralResult.SUCCESS, "没有数据", null);
} else {
return IntegralResult.build(IntegralResult.SUCCESS, "查询成功", integralDetailService.findByUserIdDate(userId, date));
}
}
....
}
二、本服务中调用
// 引用外服务api
import ...api.facade.IntegralDetailClientService;
import ...api.model.IntegralDetailModel;
public class DetailRecordServiceImpl extends.. implements ..{
...
// 注入外服务
@Resource
private IntegralDetailClientService integralDetailClientService;
// 方法
public void plusIntegral() {
...
String userJiFenId = detailRecordEntity.getUserJiFenId();
// 调用外服务findByUserIdDate方法,返回值为封装结果体 例如:
IntegralResult{code:"0000",message:"查询成功",data:null}
IntegralResult<List<IntegralDetailModel>> findResult =
integralDetailClientService.findByUserIdDate(userJiFenId, today);
if (IntegralResult.SUCCESS.equals(findResult.getCode())) {
// 将返回数据转成String类型,使用JsonUtil.beanToJson();
String integralDetailModelList = JsonUtil.beanToJson(findResult.getData());
if (integralDetailModelList == null) { // 该用户未加分
List<Integer> fullTimeList =
this.queryFullTimeByUserId(detailRecordEntity.getUserJiFenId()); // 根据用户查询当天是否全勤
fullTimeDays = fullTimeList.get(1);
}
} else {
log.error(IntegralResult.FAIL, "外服务
integralDetailClientService.findByUserIdDate(userJiFenId, today)调用失败--{}", userJiFenId);
}
...
}
小结
服务间调用的实现思路,基本上是类、接口之间的继承、实现的关系体现,必要注解的使用,同时还需要更新maven包、构建服务,这两个细节不能忽略,否则会白费力气去找代码问题。同时IntegralResult封装体的运用,返回值的接收和处理。
感谢您的访问!