gpt4 book ai didi

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

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 34 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章SpringCloud 如何使用feign时的复杂参数传递由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

Feign传参注意

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

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

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

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

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

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

服务端(生产者)

准备:

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

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@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")来声明 。

?
1
2
3
4
5
6
7
8
9
10
11
@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层 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@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);
     }

接口层 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
/**
  * 交易流水查询 可分页
  * @return JsonResultDO
  */
@RequestMapping (value = "/dealflow/list" , method = RequestMethod.POST)
public Page<DealFlowDo> 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<DealFlowDo> page = (Page<DealFlowDo> )dealFlowService.queryDealFlowList(userId, param, pageNum, pageSize);
     return page;
}

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

?
1
2
3
4
5
6
7
8
/**
   * 根据商户号获取商户信息
   *
   * @param merNo
   * @return
   */
  @RequestMapping (value = "/merchant/{merNo}" , method = RequestMethod.GET)
  String getMerchantByMerNo( @PathVariable ( "merNo" ) String merNo);

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我.

原文链接:https://blog.csdn.net/wk52525/article/details/79183113 。

最后此篇关于SpringCloud 如何使用feign时的复杂参数传递的文章就讲到这里了,如果你想了解更多关于SpringCloud 如何使用feign时的复杂参数传递的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com