SpringCloud 如何使用feign时的复杂参数传递

网友投稿 899 2022-12-29

SpringCloud 如何使用feign时的复杂参数传递

SpringCloud 如何使用feign时的复杂参数传递

Feign传参注意

最近在用SpringCloud尝试重构以前的项目,使用Feign客户端组件来调用微服务,经常出现参数传不过去变成null的问题,网上查了一下发现feign在参数上的使用还是有一定的限制的,主要是要注意:

1. 当参数比较复杂时,feign即使声明为get请求也会强行使用post请求

2. 不支持@GetMapping类似注解声明请求,需使用

@RequestMapping(value = "url",method = RequestMethod.GET)

3. 使用@RequestParam注解时必须要在后面加上参数名

写了一个简单案例,同时传输一个对象和一个字符串作为请求参数,主要关注参数的声明,其余比如eureka和feign的依赖和配置和后续使用相关的知识请另行查阅。仅供参考

服务端(生产者)http://

准备:

1. 已经配置将服务注册在eureka,服务名为“item-service”

2. service层和dao层已经实现好了

逻辑:ItemController接收参数,调用service层,service中为商品Item对象添加详情desc,然后调用dao保存Item对象,返回Result结果封装对象

@RestController

public class ItemController {

@Autowired

private ItemService itemService;

/**

* 添加

* @param item

* @param desc

* @return

*/

@RequestMapping("/item/save")

public Result addItem(@RequestBody Item item, @RequestParam("desc") String desc){

return itemService.addItem(item, desc);

}

}

客户端(消费者)

准备: 已经配置注册到eureka

逻辑:

声明ItemFeignClient调用eureka上名为"item-service"的服务,返回Result对象

使用Post请求,传递两个参数:

1. TbItem对象,使用@RequestBody来声明

2. String字符串,使用@RequestParam("xxx")来声明

@FeignClient("item-service")

public interface ItemFeignClient {

/**

* 添加

* @param item

* @param desc

* @return

*/

@RequestMapping(value = "/item/save",method = RequestMethod.POST)

Result addItem(@RequestBody TbItem item, @RequestParam("desc") String desc);

SpringCloud feign参数传递问题记录

对象传递 @RequestBody(required = false)

不支持多对象传递,至少我目前发现是这样的,如有错误或者改进的方法请提出

API层

@FeignClient(value = "transaction-feign")

public interface TransactionApiService {

/**

* 交易流水查询 可分页

*

* @param param

* @param pageNum

* @param pageSize

* @return

*/

@RequestMapping(value = "/dealflow/list", method = RequestMethod.POST)

jsonResultDO dealFlowList(@RequestBody(required = false) DealFlowDo param

, @RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum

, @RequestParam(value = "pageSize", defaultValue = "20") Integer pageSize);

}

接口层

/**

* 交易流水查询 可分页

* @return JsonResultDO

*/

@RequestMapping(value = "/dealflow/list", method = RequestMethod.POST)

public Page dealFlowList(@RequestBody(required = false) DealFlowDo param

, @RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum

, @RequestParam(value = "pageSize", defaultValue = "20") Integer pageSize

, @RequestParam(value = "userId") Long userId){

JsonResultDO resultDO = new JsonResultDO();

Page page = (Page )dealFlowService.queryDealFlowList(userIdhttp://, param, pageNum, pageSize);

return page;

}

单个或多个参数传递 @RequestParam/@PathVariable/***

/**

* 根据商户号获取商户信息

*

* @param merNo

* @return

*/

@RequestMapping(value = "/merchant/{merNo}", method = RequestMethod.GET)

String getMerchantByMerNo(@PathVariable("merNo") String merNo);

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:关于综合海事服务平台一网通办的信息
下一篇:SpringMVC核心技术
相关文章

 发表评论

暂时没有评论,来抢沙发吧~