SpringCloud Feign遇到的问题

简介: SpringCloud Feign遇到的问题

问题一:由于马虎,缺少配置,报错如下:

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.gemantic.springcloud.service.AdditionClient': FactoryBean threw exception on object creation; nested exception is java.lang.IllegalStateException: Method add not annotated with HTTP method type (ex. GET, POST)
Caused by: java.lang.IllegalStateException: Method add not annotated with HTTP method type (ex. GET, POST)

解决方案,在Feign接口上没有配置请求式,在接口上增加请求方式

@GetMapping(value="/add") 或 @RequestMapping(value="/add"),完整代码如下:
1. @FeignClient("springcloud-addition-service")
2. public interface AdditionClient {
3. 
4.     /**
5.      * 加法接口
6.      * @param a
7.      * @param b
8.      * @return
9.      */
10. //    @RequestMapping(value = "/add")
11.     @GetMapping(value = "/add")
12.     ResponseEntity<ResultData> add(@RequestParam("a") @NotNull Integer a, @RequestParam("b") @NotNull Integer b);
13. }

注: value="/add" 与真正服务一致。

问题二:

Caused by: java.lang.IllegalStateException: RequestParam.value() was empty on parameter 0

暴漏Restful服务的方法如下:

@Slf4j
@RestController
@Api(description = "加法接口")
public class AdditionController {
    @Autowired
    private Addition addition;
    @GetMapping(value = "/add")
    @ApiOperation(value = "a + b = ?")
    public ResponseEntity<ResultData> add(@RequestParam @NotNull Integer a, @RequestParam @NotNull Integer b) {
        if (log.isInfoEnabled()) {
            log.info("add {} + {}", a, b);
        }
        int result = addition.add(a, b);
        ResultData resultData = ResultData.builder().message(Message.builder().code(0).message(Message.SUCCESS_MESSAGE).build()).build();
        resultData.setData(result);
        return ResponseEntity.ok(resultData);
    }
}

Feign的方式的接口如下:

@GetMapping(value = "/add")
ResponseEntity<ResultData> add(@RequestParam @NotNull Integer a, @RequestParam @NotNull Integer b);

服务启动时就会报错误:

Caused by: java.lang.IllegalStateException: RequestParam.value() was empty on parameter 0

解决方案:在 @RequestParam 增加方法名

@GetMapping(value = "/add")
ResponseEntity<ResultData> add(@RequestParam("a") @NotNull Integer a, @RequestParam("b") @NotNull Integer b);

注: @PathVariable@RequestParam类似的。

问题三:

Caused by: java.lang.IllegalStateException: Method has too many Body parameters: public abstract org.springframework.http.ResponseEntity com.gemantic.springcloud.service.AdditionClient.add(java.lang.Integer,java.lang.Integer)

解决方案:当使用Feign时,如果发送的是get请求,那么需要在请求参数前加上 @RequestParam@PathVariable注解修饰,Controller里面可以不加该注解修饰。

1. @GetMapping(value = "/add")
2. ResponseEntity<ResultData> add(@RequestParam("a") @NotNull Integer a, @RequestParam("b") @NotNull Integer b);
相关文章
|
1月前
|
负载均衡 Java 开发者
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
129 5
|
3月前
|
JSON Java 数据格式
【微服务】SpringCloud之Feign远程调用
本文介绍了使用Feign作为HTTP客户端替代RestTemplate进行远程调用的优势及具体使用方法。Feign通过声明式接口简化了HTTP请求的发送,提高了代码的可读性和维护性。文章详细描述了Feign的搭建步骤,包括引入依赖、添加注解、编写FeignClient接口和调用代码,并提供了自定义配置的示例,如修改日志级别等。
150 1
|
4月前
|
负载均衡 Java Nacos
SpringCloud基础2——Nacos配置、Feign、Gateway
nacos配置管理、Feign远程调用、Gateway服务网关
SpringCloud基础2——Nacos配置、Feign、Gateway
|
4月前
|
前端开发 API 微服务
SpringCloud微服务之间使用Feign调用不通情况举例
SpringCloud微服务之间使用Feign调用不通情况举例
685 2
|
3月前
|
负载均衡 Java API
【Spring Cloud生态】Spring Cloud Gateway基本配置
【Spring Cloud生态】Spring Cloud Gateway基本配置
68 0
|
4月前
|
Java API 开发者
【已解决】Spring Cloud Feign 上传文件,提示:the request was rejected because no multipart boundary was found的问题
【已解决】Spring Cloud Feign 上传文件,提示:the request was rejected because no multipart boundary was found的问题
775 0
|
5月前
|
Java Spring
【Azure Spring Cloud】Spring Cloud Azure 4.0 调用Key Vault遇见认证错误 AADSTS90002: Tenant not found.
【Azure Spring Cloud】Spring Cloud Azure 4.0 调用Key Vault遇见认证错误 AADSTS90002: Tenant not found.
|
5月前
|
Java Spring 容器
【Azure Spring Cloud】在Azure Spring Apps上看见 App Memory Usage 和 jvm.menory.use 的指标的疑问及OOM
【Azure Spring Cloud】在Azure Spring Apps上看见 App Memory Usage 和 jvm.menory.use 的指标的疑问及OOM
|
5月前
|
存储 Java Spring
【Azure Spring Cloud】Azure Spring Cloud服务,如何获取应用程序日志文件呢?
【Azure Spring Cloud】Azure Spring Cloud服务,如何获取应用程序日志文件呢?
|
5月前
|
SQL Java 数据库连接
【Azure Spring Cloud】Azure Spring Cloud connect to SQL using MSI
【Azure Spring Cloud】Azure Spring Cloud connect to SQL using MSI