Feign接口方法返回值设置

本文探讨了在微服务架构中,使用Feign调用接口时的返回值设置策略,包括依据被调用服务接口设置相同返回类型、全部设置为String类型的方法及各自的优缺点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                         Feign接口方法返回值设置

一、介绍

随着微服务的广泛应用,越来越多的企业都会使用微服务进行项目开发,在各个服务之间需要通过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进行接口调用时,我们可以通过统一处理返回值来简化代码。具体来说,我们可以定义一个类或接口来处理返回值。该类或接口可以使用泛型来适应不同的返回值类型。 首先,我们可以定义一个统一的接口来处理返回值,例如`ResponseProcessor`。该接口可以使用泛型来适应不同的返回值类型。我们可以在接口中定义一个方法来对返回值进行处理。 ```java public interface ResponseProcessor<T> { void process(T response); } ``` 接下来,我们可以创建一个公共的处理类,例如`FeignResponseHandler`,该类实现了`ResponseProcessor`接口,并根据实际情况对返回值进行处理。例如,我们可以在`process`方法中打印返回值或进行其他操作。这样,我们就可以在需要处理返回值的地方直接使用该处理类。 ```java public class FeignResponseHandler<T> implements ResponseProcessor<T> { @Override public void process(T response) { // 对返回值进行处理,例如打印返回值 System.out.println("处理返回值:" + response.toString()); } } ``` 最后,我们可以在调用Feign接口的地方使用这个处理类。在调用的时候,我们可以将处理类作为参数传入Feign的请求方法中。这样,当请求返回时,就会自动调用处理类对返回值进行处理。 ```java // 调用Feign接口 FeignClient feignClient = new FeignClient(); ResponseProcessor<String> processor = new FeignResponseHandler<>(); feignClient.request(processor); // Feign接口定义 public interface FeignClient { @RequestLine("GET /api") void request(ResponseProcessor<String> processor); } ``` 这样,我们就可以将返回值的处理逻辑统一封装到一个类中,并通过泛型适应不同的返回值类型。这样可以简化代码,并且使代码更具可维护性和可扩展性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值