我有像这样的FeignClient
@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;
` 我没有使用spring cloud netflix。但我一直得到以下例外。
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)
我正在实例化我的客户端。
return Feign.builder()
.encoder(new JacksonEncoder())
.decoder(new JacksonDecoder())
.logger(new Slf4jLogger())
.logLevel(Logger.Level.FULL)
.target(RegularFeignClient.class, url);
答案 0 :(得分:9)
@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;
这有效!!!
感谢我的高级开发人员。他找到了。
答案 1 :(得分:0)
我有同样的错误,但不是因为参数顺序。经调查发现,问题出在我的大意。我已经定义了路径中缺少的参数定义。即:
/someapi/bla/{parm1}/bla/
parameters:
- $ref: '#/parameters/parm1'
- $ref: '#/parameters/parm2'
更改为:
/someapi/bla/{parm1}/bla/
parameters:
- $ref: '#/parameters/parm1'
解决了问题。希望它能帮助遇到同样问题的人。
答案 2 :(得分:0)
伪装中的参数顺序应与spencergibb在本期https://github.com/spring-cloud/spring-cloud-netflix/issues/1915中所述无关紧要。如果您不将表单参数与主体参数一起使用,则应搜索为什么将其中一个参数解释为表单参数。
使用spring @RequestMapping注释,我的特定问题是由于拼写错误,假装错误地误解了我的一个参数注释,在我的情况下,我提供了一个请求路径值/ path / {pathParam}并使用@PathVariable( “ pathparam”),并带有小写错字。