feign调用参数为实体类时-报错的解决方法分享

欣喜 SpringBoot 发布时间:2024-04-29 14:05:22 阅读数:16417 1
在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);
    }
 
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaFramework/SpringBoot/202404/8124.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者