feign调用参数为实体类时-报错的解决方法分享
在springcloud中,我们调用的参数为一个实体类,此时会出现调用失败的现象,那么如何解决此类异常呢?下文笔者将一一道来,如下所示
方式1:
参数转换为map形式
方式2:
使用@SpringQueryMap注解
方式3:
使用feign-httpclient工具类即可
例
方法1:参数转map
首先我们无法调用是因为不支持实体类参数,那么转换为键值对参数就可以实现调用了
参数转换:
@GetMapping("getBody2")
public String getBody2(){
Product product = new Product();
product.setId(1L);
product.setName("苹果");
product.setPrice(new BigDecimal("123.3"));
product.setQuantity(2);
// 实体类转json字符串 需要引入fastjson依赖
String jsonString = JSON.toJSONString(product);
// json字符串转map
Map params = JSON.parseObject(jsonString, Map.class);
return "order info " + productFeignNacos.getByBody2(params);
}
feign接口声明:
注意这种形式,需要添加@RequestParam注解,并命名与被调用接口参数名一致
@GetMapping("getByBody2")
String getByBody2(@RequestParam("product") Map product);
被调用接口:
@GetMapping("getByBody2")
public String getByBody2(Product product){
return "product:" + JSON.toJSONString(product);
}
方法2:利用@SpringQueryMap注解自动转map
@SpringQueryMap注解可以将实体类自动转换为map,那么我们就不需要手动转换成map了
feign接口声明
@GetMapping("getByBody2")
String getByBody3(@SpringQueryMap Product product);
1
2
方法3:利用feign-httpclient工具包
feign-httpclient工具包提供了支持GET实体参数的实现,我们只需要引入这个依赖即可
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-httpclient</artifactId>
<version>10.10.1</version>
</dependency>
调用方代码:
@GetMapping("getBody4")
public String getBody4(){
Product product = new Product();
product.setId(1L);
product.setName("计算机");
product.setPrice(new BigDecimal("89889"));
product.setQuantity(2);
return "order info " + productFeignNacos.getByBody4(product);
}
feign接口声明:
@GetMapping(value = "")
String getByBody4(Product product);
被调用接口:
@GetMapping(value = "getByBody3", consumes = MediaType.APPLICATION_JSON_VALUE)
public String getByBody3(@RequestBody Product product){
return "product:" + JSON.toJSONString(product);
}
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


