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); }
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。