Body parameters cannot be used with form parameters - Feign client with Headers and json data

匿名 (未验证) 提交于 2019-12-03 01:20:02

问题:

I have a FeignClient like this

@RequestLine("POST /enroll") @Headers({ "header1: {header1}", "header2: {header2}", "Content-Type: application/json" }) ResponseDto enroll(@Param("header1") String header1,@Param("header1") String header1, RequestDto requestDto)throws MyCustomException; 

` I am not using spring cloud netflix. But I am keep getting the below exception.

Caused by: java.lang.IllegalStateException: Body parameters cannot be used with form parameters. at feign.Util.checkState(Util.java:128) at feign.Contract$BaseContract.parseAndValidateMetadata(Contract.java:112) at feign.Contract$BaseContract.parseAndValidatateMetadata(Contract.java:64) at feign.ReflectiveFeign$ParseHandlersByName.apply(ReflectiveFeign.java:146) at feign.ReflectiveFeign.newInstance(ReflectiveFeign.java:53) at feign.Feign$Builder.target(Feign.java:209) at feign.Feign$Builder.target(Feign.java:205) 

I am instantiating my client like this.

return Feign.builder()         .encoder(new JacksonEncoder())         .decoder(new JacksonDecoder())         .logger(new Slf4jLogger())         .logLevel(Logger.Level.FULL)         .target(RegularFeignClient.class, url); 

回答1:

Wow this a tricky one. The order of parameters matter here.

@RequestLine("POST /enroll") @Headers({ "header1: {header1}", "header2: {header2}", "Content-Type: application/json" }) ResponseDto enroll(RequestDto requestDto, @Param("header1") String header1,@Param("header1") String header1)throws MyCustomException; 

This works!!!

Thanks to my senior developer. He found it.



回答2:

I has same error , but not because of order of parameter. Upon investigation found that the problem was in my swagger definition. I had defined parameter definition that was missing missing in path. ie:

     /someapi/bla/{parm1}/bla/        parameters:           - $ref: '#/parameters/parm1'           - $ref: '#/parameters/parm2' 

Changed to:

     /someapi/bla/{parm1}/bla/        parameters:           - $ref: '#/parameters/parm1' 

solved the issue. Hope it helps some one with same issue.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!