SpringCloud Feign报错:java.lang.IllegalStateException: Method has too many Body parameters

简介: SpringCloud Feign报错:java.lang.IllegalStateException: Method has too many Body parameters

一、报错信息

错误日志内容为:

Caused by: java.lang.IllegalStateException: Method has too many Body parameters: public abstract com.soft.framework.core.response.CommResponse com.soft.back.openplatform.api.AdvertApi.insertAdvertTactics(com.soft.back.openplatform.model.AdvertTactics,java.lang.String)
  at feign.Util.checkState(Util.java:127)
  at feign.Contract$BaseContract.parseAndValidateMetadata(Contract.java:117)
  at org.springframework.cloud.openfeign.support.SpringMvcContract.parseAndValidateMetadata(SpringMvcContract.java:188)
  at feign.Contract$BaseContract.parseAndValidatateMetadata(Contract.java:66)
  at feign.hystrix.HystrixDelegatingContract.parseAndValidatateMetadata(HystrixDelegatingContract.java:46)
  at feign.ReflectiveFeign$ParseHandlersByName.apply(ReflectiveFeign.java:154)
  at feign.ReflectiveFeign.newInstance(ReflectiveFeign.java:52)
  at feign.hystrix.HystrixFeign$Builder.target(HystrixFeign.java:70)
  at org.springframework.cloud.openfeign.HystrixTargeter.targetWithFallbackFactory(HystrixTargeter.java:64)
  at org.springframework.cloud.openfeign.HystrixTargeter.target(HystrixTargeter.java:51)
  at org.springframework.cloud.openfeign.FeignClientFactoryBean.loadBalance(FeignClientFactoryBean.java:238)
  at org.springframework.cloud.openfeign.FeignClientFactoryBean.getTarget(FeignClientFactoryBean.java:267)
  at org.springframework.cloud.openfeign.FeignClientFactoryBean.getObject(FeignClientFactoryBean.java:247)
  at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:171)
  ... 43 common frames omitted

二、feign多参数问题

2.1 POST方式

错误写法

@ApiOperation("保存策略型号关系")
@PostMapping("/openapi/tactics/insertTacticsModel")
public CommResponse<?> insertTacticsModel(@RequestBody TacticsModel tm, @RequestBody("tacticsId") Integer tacticsId){
    // todo 更多代码
}

feign中你可以有多个@RequestParam,但只能有不超过一个@RequestBody。

正确写法

@ApiOperation("保存策略型号关系")
@PostMapping("/openapi/tactics/insertTacticsModel")
public CommResponse<?> insertTacticsModel(@RequestBody TacticsModel tm, @RequestParam("tacticsId") Integer tacticsId, @RequestParam("modelIds") String modelIds){
    // todo 更多代码
}

2.2 GET方式

错误写法

@RequestMapping(value="/test", method=RequestMethod.GET)  
public Model test(String name, int age){
    // todo 更多代码
}

启动服务的时候,会报如下异常:

Caused by: java.lang.IllegalStateException: Method has too many Body parameters: public abstract com.soft.framework.core.response.CommResponse com.soft.back.openplatform.api.AdvertApi.insertAdvertTactics(com.soft.back.openplatform.model.AdvertTactics,java.lang.String)

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

正确写法

@RequestMapping(value="/test", method=RequestMethod.GET)
public Model test(@RequestParam("name") String name, @RequestParam("age") int age){
    // todo 更多代码
}

 

完结!

 


相关文章
|
2月前
|
应用服务中间件 nginx 微服务
SpringCloud解决feign调用token丢失问题
【5月更文挑战第2天】在feign调用中可能会遇到如下问题: * 同步调用中,token丢失,这种可以通过创建一个拦截器,将token做透传来解决 * 异步调用中,token丢失,这种就无法直接透传了,因为子线程并没有**token**,这种需要先将token从父线程传递到子线程,再进行透传
221 3
|
2月前
|
监控 Java API
Spring cloud Hystrix 、Dashboard、API(zuul)相关报错
Spring cloud Hystrix 、Dashboard、API(zuul)相关报错
31 2
|
2月前
|
设计模式 Java 容器
【设计模式】JAVA Design Patterns——Async Method Invocation(异步方法调用模式)
【设计模式】JAVA Design Patterns——Async Method Invocation(异步方法调用模式)
|
1天前
|
负载均衡 Java 开发者
细解微服务架构实践:如何使用Spring Cloud进行Java微服务治理
【6月更文挑战第30天】Spring Cloud是Java微服务治理明星框架,整合Eureka(服务发现)、Ribbon(客户端负载均衡)、Hystrix(断路器)、Zuul(API网关)和Config Server(配置中心),提供完整服务治理解决方案。通过Eureka实现服务注册与发现,Ribbon进行负载均衡,Hystrix确保服务容错,Config Server集中管理配置,Zuul则作为API入口统一处理请求。理解和使用Spring Cloud是现代Java开发者的关键技能。
14 2
|
2天前
|
负载均衡 Java API
使用Spring Cloud构建Java微服务架构
使用Spring Cloud构建Java微服务架构
|
7天前
|
Java 测试技术
Java反射之Method的invoke方法详解
Java反射之Method的invoke方法详解
|
4天前
|
XML JSON Java
经验大分享:SpringCloud之Feign
经验大分享:SpringCloud之Feign
|
2月前
|
前端开发 JavaScript Java
Java网络商城项目 SpringBoot+SpringCloud+Vue 网络商城(SSM前后端分离项目)五(前端页面
Java网络商城项目 SpringBoot+SpringCloud+Vue 网络商城(SSM前后端分离项目)五(前端页面
Java网络商城项目 SpringBoot+SpringCloud+Vue 网络商城(SSM前后端分离项目)五(前端页面
|
2月前
|
负载均衡 Java 开发者
细解微服务架构实践:如何使用Spring Cloud进行Java微服务治理
【4月更文挑战第17天】Spring Cloud是Java微服务治理的首选框架,整合了Eureka(服务发现)、Ribbon(客户端负载均衡)、Hystrix(熔断器)、Zuul(API网关)和Config Server(配置中心)。通过Eureka实现服务注册与发现,Ribbon提供负载均衡,Hystrix实现熔断保护,Zuul作为API网关,Config Server集中管理配置。理解并运用Spring Cloud进行微服务治理是现代Java开发者的关键技能。
|
2月前
|
JSON Java Apache
Spring Cloud Feign 使用Apache的HTTP Client替换Feign原生httpclient
Spring Cloud Feign 使用Apache的HTTP Client替换Feign原生httpclient