Replicate problem:
Pom relevant deps:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>2022.0.4</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-hc5</artifactId> <!-- Required to use PATCH over default HttpURLConnection -->
</dependency>
Config in application-local.properties
feign.url=https://subdomain.address.com/endpoint
Client:
@FeignClient(name = "test-client", url = "${feign.url}")
public interface TestClient {
@PatchMapping(value = "('{id}')")
void patchTest(@PathVariable String id, @RequestBody TestDto dto);
@DeleteMapping(value = "('{id}')")
void deleteTest(@PathVariable String id);
}
Expected behaviour is a call from client.patchTest(id, dto) results in a call to:
https://subdomain.address.com/endpoint('id')
Measured behaviour however is a call to:
https://subdomain.address.com/endpoint/('id')
introducing an additional slash and creating a bad request for both the PATCH and the DELETE, GET and POST do not exhibit this.
Desired behaviour is no magic slash.
Comment From: OlgaMaciaszek
Hello @MarcelTon , I've just tried it and I see the same behaviour for GET also. If you were able to replicate a different behaviour for GET, please provide your sample. Furthermore, this is not a Spring Cloud OpenFeign specific behaviour. The uriTemplate is being added by the feign.RequestTemplate#uri(java.lang.String, boolean) method in OF. I see you've created an issue there and they've requested you to move it here, but I'm not sure why; Furthermor, it seems to be done by design there, as OF expects to get complete path segments from the user, i.e., if you do sth like this with OF (without the Spring Cloud OF dependency in your project even):
@RequestLine("GET ('test')")
String getTest();
you will still end up with GET https://subdomain.address.com/endpoint/('test') being called, and we expect the same with Spring Cloud OF.
Comment From: spring-cloud-issues
If you would like us to look at this issue, please provide the requested information. If the information is not provided within the next 7 days this issue will be closed.
Comment From: spring-cloud-issues
Closing due to lack of requested feedback. If you would like us to look at this issue, please provide the requested information and we will re-open the issue.