The following client:

@FeignClient(
        name = "tokenKeySignProxy",
        url = "localhost:8080/tokens/{tokenId}/keys/{keyId}"
)
public interface TokenKeySignVerifyProxy {
    @PostMapping(
            value = "/sign",
            consumes = MatosMediaType.V1_VALUE,
            produces = MatosMediaType.V1_VALUE
    )
    SignResponse sign(
            @PathVariable("tokenId") String tokenId,
            @PathVariable("keyId") String keyId,
            @RequestParam("mechanism") Mechanism signMechanism,
            @RequestBody SignRequest signRequest
    );
}

cannot be created. It fails with the following error:

Caused by: java.lang.IllegalStateException: Body parameters cannot be used with form parameters.
    at feign.Util.checkState(Util.java:129) ~[feign-core-10.7.4.jar:na]
    at feign.Contract$BaseContract.parseAndValidateMetadata(Contract.java:125) ~[feign-core-10.7.4.jar:na]
    at org.springframework.cloud.openfeign.support.SpringMvcContract.parseAndValidateMetadata(SpringMvcContract.java:187) ~[spring-cloud-openfeign-core-2.2.2.RELEASE.jar:2.2.2.RELEASE]
    at feign.Contract$BaseContract.parseAndValidateMetadata(Contract.java:62) ~[feign-core-10.7.4.jar:na]
    at feign.ReflectiveFeign$ParseHandlersByName.apply(ReflectiveFeign.java:151) ~[feign-core-10.7.4.jar:na]
    at feign.ReflectiveFeign.newInstance(ReflectiveFeign.java:49) ~[feign-core-10.7.4.jar:na]
    at feign.Feign$Builder.target(Feign.java:252) ~[feign-core-10.7.4.jar:na]
    at org.springframework.cloud.openfeign.HystrixTargeter.target(HystrixTargeter.java:38) ~[spring-cloud-openfeign-core-2.2.2.RELEASE.jar:2.2.2.RELEASE]
    at org.springframework.cloud.openfeign.FeignClientFactoryBean.getTarget(FeignClientFactoryBean.java:304) ~[spring-cloud-openfeign-core-2.2.2.RELEASE.jar:2.2.2.RELEASE]
    at org.springframework.cloud.openfeign.FeignClientFactoryBean.getObject(FeignClientFactoryBean.java:262) ~[spring-cloud-openfeign-core-2.2.2.RELEASE.jar:2.2.2.RELEASE]
    at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:171) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    ... 36 common frames omitted

I found two ways to get rid of this error: 1. Moving the variable declaration into @PostMapping annotation:

@PostMapping(
    value = "/tokens/{tokenId}/keys/{keyId}/sign",
 ```
2. Moving `@RequestBody` annotation before all `@PathVariable` in method signature:

SignResponse sign( @RequestParam("mechanism") Mechanism signMechanism, @RequestBody SignRequest signRequest, @PathVariable("tokenId") String tokenId, @PathVariable("keyId") String keyId ```

Am I doing something wrong ?

Environment: * spring-cloud-dependencies-Hoxton.SR3; * spring-boot-starter-parent-2.2.6-RELEASE; * spring-cloud-starter-openfeign-2.2.2-RELEASE

Comment From: OlgaMaciaszek

Hi, @3ric-T. This, indeed, happens. However, according to the javadoc for @FeignClient, the `url attribute should be used for providing an absolute URL or the hostname . Therefore, the path variable tokens, should not be used there. I suggest moving them to method path level.

Comment From: 3ric-T

Hi @OlgaMaciaszek Thanks for the answer! I will modify my code accordingly, I guess I will not play with @RequestBody and @PathVariable order in method signature.