- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章SpringCloud 如何使用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);
|
不支持多对象传递,至少我目前发现是这样的,如有错误或者改进的方法请提出 。
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;
}
|
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的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
有什么区别: spring-cloud-starter-openfeign ( https://github.com/spring-cloud/spring-cloud-openfeign ) 和 s
我们正在使用netflix feign来调用 Restful Web服务。对于补丁请求,看来不支持PATCH请求。 Caused by: feign.RetryableException: Inval
据我了解,当请求响应状态码!= 2xx 时,将调用 feign ErrorDecoder 的 decode() 方法。通过调试我的测试,我发现我的 CustomErrorDecoder 的 decod
我有一个像这样构建的假客户端服务: Feign.Builder builder = Feign.builder() .contract(new SpringMvcContract())
使用spring cloud feign调用我的服务,当服务返回401异常时,respose.body()一片空白。 当我抛出异常时 throw new BadRequestException(400
我使用 ErrorDecoder 返回正确的异常而不是 500 状态代码。 有没有办法在解码器中检索原始消息。我可以看到它在 FeignException 中,但不在 decode 方法中。我所拥有的
通过学习曲线,遇到了这个场景: 鉴于90%的调用都是JSON,在构建客户端时添加了GSON解码器。不过接口(interface)中有些方法调用应该是支持raw return without decod
我正在尝试使用以下 Feign 客户端在 Spring Boot 应用程序中检索在线图像内容。 @FeignClient(name = "image") public interface ImageC
我正在使用需要设置几个字段的 REST api。我的应用程序应始终将某些字段设置为相同的值。是否可以在带有 feign 定义(或其他地方)的界面中使这些值“硬编码”? 我的假声明看起来像这个例子。假设
我是新来的 Spring 和假装和探索几天以来。我能够向我们的 protected 资源(用户名/密码)发出身份验证请求,并在后续请求 header 中使用身份验证服务返回的 JWT token 。但
我尝试在我的 Spring Boot 应用程序上配置 OpenFeign,我使用 pokeapi 进行测试。 我编写了这段代码: @FeignClient(value = "pokeapi", url
快速浏览了Feign的源码,发现Feign使用的是JDK的HttpUrlConnection在不使用连接池的情况下发出 HTTP 请求并在请求完成时关闭它。我怀疑这种方式的效率。然后我看了Spring
我为 feignClients 启用了我的 spring 云,如下所示: @Configuration @EnableAutoConfiguration @RestController @Enable
当我发帖时 Map使用 Feign Client,我收到错误消息: feign.FeignException: status 400 reading MAp . 代码 //Client side @C
目录 使用HttpClient和OkHttp 使用HttpClient 使用OkHttp OpenFeign替换为OkHtt
需求 最近小编的项目中出现了很多feign 调用出现 Read Time out 的异常,但因为没有集成链路追踪的第三方框架,查不到原因。 所以想到打印请求的ip地址,判断是指定的服务器出现的问
我正在使用 spring feign 压缩请求和响应 服务器端: server: servlet: context-path: /api/v1/ compression: en
我面临以下情况,令我惊讶的是,我找不到太多文档:有一项服务仅通过一一获取项目详细信息来提供休息调用。总共有 1000 多个项目。 出于响应能力的原因,我想将这些数据保留在我的一端,而不是懒惰地获取它。
我正在尝试实现一个涉及 FeignClient 调用的单元测试,该调用应返回 404 Not Found。 由于 Feign 抛出了 404 异常,那么实现此测试用例的正确方法是什么? 我正在尝试这样
当使用spring-cloud-feign连接到本地主机时,Feign找不到url,而是给我以下错误消息。 2019-11-13 12:01:55.553 ERROR 23798 --- [n
我是一名优秀的程序员,十分优秀!