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);

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章