【Java异常】Caused by: java.lang.IllegalStateException: Method has too many Body parameters

简介: 【Java异常】Caused by: java.lang.IllegalStateException: Method has too many Body parameters

1、错误信息

异常:Caused by: java.lang.IllegalStateException: Method has too many Body parameters

Caused by: java.lang.IllegalStateException: Method has too many Body parameters: public abstract com.iot.framework.core.response.CommResponse 
com.iot.basic.config.api.client.configdata.PushRuleClient.getByEventId(java.lang.String,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.Feign$Builder.target(Feign.java:251)
  at org.springframework.cloud.openfeign.HystrixTargeter.target(HystrixTargeter.java:55)
  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

2、错误原因

报错信息翻译过来就是:方法有太多的Body参数。根据错误提示信息,可以看到具体的是哪个方法,然后找到对应的方法,查看参数是否有误,当通过Feign客户端调用其他服务的接口时,请求参数可以有多个,用spring自带的注解用的方式不对,所以才导致报错。在同一个方法参数位置,@RequestParam注解可以用多个,但是@RequestBody注解只能用一个。

以下是我项目里用的方式,String devModel, String eventId这两个参数没有用@RequestParam注解说明,导致上述报错。

@ApiOperation("根据模型事件查询消息规则")
@RequestMapping(value = "/pushRule/getByEventId",method = RequestMethod.GET)
public CommResponse<List<PushRuleResponse>> getByEventId(String devModel, String eventId);

3、解决方案

解决方法其实很简单,在方法的参数上加上@RequestParam注解(同时可以用多个)即可。这里有两个参数,加上两个@RequestParam注解。如果有一个对象参数是要用@RequestBody注解的(这个注解同时只能用一个)。

@ApiOperation("根据模型事件查询推送规则")
@RequestMapping(value = "/pushRule/getByEventId",method = RequestMethod.GET)
public CommResponse<List<PushRuleResponse>> getByEventId(@RequestParam String devModel, @RequestParam String eventId);

 


相关文章
|
22天前
|
Java 开发者 UED
【实战宝典】Java异常处理大师级教程:throws关键字,让异常声明成为你的专属标签!
【实战宝典】Java异常处理大师级教程:throws关键字,让异常声明成为你的专属标签!
35 3
|
2天前
|
Java 编译器 数据库连接
Java——异常
在 Java 中,程序执行过程中的不正常行为被称为异常。异常分为 Error 和 Exception。Error 表示系统级错误,而 Exception 则封装程序可能出现的问题。异常包括编译时异常和运行时异常(如数组越界)。异常可用于查找 bug 信息和作为方法内部的特殊返回值。处理异常的方式有默认处理和捕获异常,后者通过 try-catch 结构实现。此外,还可以自定义异常类来更灵活地处理特定情况。
18 9
Java——异常
|
5天前
|
安全 Java API
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
String常量池、String、StringBuffer、Stringbuilder有什么区别、List与Set的区别、ArrayList和LinkedList的区别、HashMap底层原理、ConcurrentHashMap、HashMap和Hashtable的区别、泛型擦除、ABA问题、IO多路复用、BIO、NIO、O、异常处理机制、反射
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
|
22天前
|
Java 数据库连接 程序员
Java 认识异常
Java 认识异常
11 1
|
16天前
|
Java C++
Java内存区域于内存溢出异常
这篇文章详细解释了Java虚拟机的内存区域划分、各区域的作用以及可能遇到的内存溢出异常情况。
29 0
|
Java
Java反射之Method对象详解
使用Java反射,可以在运行时检查一个方法的信息以及在运行期调用这个方法,通过使用java.lang.reflect.Method类就可以实现上述功能。
445 0
|
5天前
|
存储 缓存 安全
【Java面试题汇总】多线程、JUC、锁篇(2023版)
线程和进程的区别、CAS的ABA问题、AQS、哪些地方使用了CAS、怎么保证线程安全、线程同步方式、synchronized的用法及原理、Lock、volatile、线程的六个状态、ThreadLocal、线程通信方式、创建方式、两种创建线程池的方法、线程池设置合适的线程数、线程安全的集合?ConcurrentHashMap、JUC
【Java面试题汇总】多线程、JUC、锁篇(2023版)
|
16天前
|
监控 Java 调度
【Java学习】多线程&JUC万字超详解
本文详细介绍了多线程的概念和三种实现方式,还有一些常见的成员方法,CPU的调动方式,多线程的生命周期,还有线程安全问题,锁和死锁的概念,以及等待唤醒机制,阻塞队列,多线程的六种状态,线程池等
78 6
【Java学习】多线程&JUC万字超详解
|
1天前
|
Java
深入理解Java中的多线程编程
本文将探讨Java多线程编程的核心概念和技术,包括线程的创建与管理、同步机制以及并发工具类的应用。我们将通过实例分析,帮助读者更好地理解和应用Java多线程编程,提高程序的性能和响应能力。
14 4
|
9天前
|
Java 调度 开发者
Java并发编程:深入理解线程池
在Java的世界中,线程池是提升应用性能、实现高效并发处理的关键工具。本文将深入浅出地介绍线程池的核心概念、工作原理以及如何在实际应用中有效利用线程池来优化资源管理和任务调度。通过本文的学习,读者能够掌握线程池的基本使用技巧,并理解其背后的设计哲学。