设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 重新 数据 创业者
当前位置: 首页 > 综合聚焦 > 编程要点 > 正文

Feign接口方法返回值设置方法

发布时间:2021-11-18 13:22 所属栏目:13 来源:互联网
导读:一、介绍 随着微服务的广泛应用,越来越多的企业都会使用微服务进行项目开发,在各个服务之间需要通过feign来进行通信,所以在feign调用接口中方法会接受其他服务接口不同类型返回值。 二、返回值设置 1、依据被调用服务接口设置相同返回类型 介绍:微服务A接
一、介绍
随着微服务的广泛应用,越来越多的企业都会使用微服务进行项目开发,在各个服务之间需要通过feign来进行通信,所以在feign调用接口中方法会接受其他服务接口不同类型返回值。
 
二、返回值设置
1、依据被调用服务接口设置相同返回类型
介绍:微服务A接口getUser 返回List<User>类型,微服务B通过feign调用方法也返回相同的结果类型。
 
特点:返回类型一一对应,在调用时不需要进行转化直接拿来就可以用。
 
缺点:扩展性不好,维护性不加。
 
解释:在目前springboot开发中,接口一般都会返回json类型数据(也就是使用@restController或者使用@ResponseBody注解修饰),就算是对象或者对象集合也是一样的,或者其他自己封装的返回对象。如果有许多不同的返回对象,当这些返回对象在A服务做了修改相应的在B服务的feign接口处也要做修改,相当麻烦且不符合java面向接口编程思想。
 
2、全部设置为String
介绍:微服务A接口只要被@restController或者使用@ResponseBody注解修饰我统统在微服务Bfeign接口使用String来进行接受。
 
特点:通过String来接受返回参数,格式一致。
 
缺点:后面调用需要转换。
 
代码介绍:
 
// 微服务A controller 已经使用@restController修饰
@PostMapping(value="/getAllQuestionBank",produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public List<QuestionBankDto> getAllQuestionBank(){
return baseinfoQuestionMange.getAllQuestionBank();
}
 
// 微服务B feign接口 使用String进行接受
@PostMapping(value="/baseinfo/getAllQuestionBank")
String getAllQuestionBank();
 
// 微服务B 当需要调用feign信息时需要强转成List<QuestionBankDto>格式
 
// 调用微服务获取题库章节信息,该处强制使用try catch进行包裹
String questionBankInfo = baseInfoApi.getAllQuestionBank();
List<QuestionBankDto> mysqlQuestionBank = objectMapper.readValue(questionBankInfo,new TypeReference<ArrayList<QuestionBankDto>>(){});
 
 
只要你导入一下springboot依赖,它默认就给你导入了Jackson jar包
 
 
 
注意事项:使用该方式时需要将ObjectMapper配置到bean容器中。
 
 
 
3、总结
项目不同,需求不同,两种方式没有谁对谁错之分,依据自己项目需求进行选择。
 
Feign 使用这几天遇到的一些问题
事情的起因要从我打算调用下paas模块服务开始
 
Feign 现在教程很多,然后引入下pom
 
 <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
自己定义下接口
 
@FeignClient(name = "weixinTokenClient", url = "https://qyapi.weixin.qq.com/cgi-bin")
public interface IWeiXinTokenClient {
   /**
    * 获取应用的token
    * @param corpid
    * @param corpsecret
    * @return
    */
   @RequestMapping(value = "/gettoken", method = RequestMethod.GET)
   WeiXinTokenResultModel getToken(@RequestParam String corpid, @RequestParam String corpsecret);
}
写个test类测试下,完美返回,因为自己写过类似的项目,可以看下lemur-http,原理大体一致,想了想还是简单的.但是后面的问题就出来

(编辑:ASP站长网)

    网友评论
    推荐文章
      热点阅读