See*_*Tmr 8 java spring httpclient feign
我有这样的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;
Run Code Online (Sandbox Code Playgroud)
`我没有使用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)
Run Code Online (Sandbox Code Playgroud)
我像这样实例化我的客户端.
return Feign.builder()
.encoder(new JacksonEncoder())
.decoder(new JacksonDecoder())
.logger(new Slf4jLogger())
.logLevel(Logger.Level.FULL)
.target(RegularFeignClient.class, url);
Run Code Online (Sandbox Code Playgroud)
See*_*Tmr 12
哇这是一个棘手的问题.参数的顺序在这里很重要.
@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;
Run Code Online (Sandbox Code Playgroud)
这个工作!!!
感谢我的高级开发人员.他找到了.
小智 6
正如 spencergibb 在本期中所述,feign 中的参数顺序无关紧要:https : //github.com/spring-cloud/spring-cloud-netflix/issues/1915。如果您不将表单参数与正文参数一起使用,您应该搜索为什么您的一个参数被解释为表单参数。
我的具体问题是,使用 spring @RequestMapping 注释是 feign 由于打字错误而误解了我的参数注释之一,在我的情况下,我提供了一个请求路径值 /path/{pathParam} 并使用 @PathVariable("pathparam" ) 带有小写拼写错误。
| 归档时间: |
|
| 查看次数: |
5670 次 |
| 最近记录: |