Search code examples
javaspringresttemplate

Java - RestTemplate - Connection Refused


Been running myself crazy trying to solve this, very short this is the code I use to execute a call towards my REST endpoint:

String url = "http://localhost:5000/getMyObject";
SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
RestTemplate restTemplate = new RestTemplate(factory);

String result = restTemplate.getForObject(url, String.class);

But no matter what headers I add it always ends up with connection refused.

Snippet of Stacktrace:

Caused by: java.net.ConnectException: Connection refused: connect
at java.base/java.net.PlainSocketImpl.waitForConnect(Native Method)
...
org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:776)
... 74 more

Setup: Test running on Windows, Application running in WSL

  • It works through Curl (in console and through my test)
  • It works if the test itself starts the application
  • It works through web browser

Curl -v:

localhost:5000/getMyObject
* Trying 127.0.0.1:5000
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 5000 (#0)
> GET /getMyObject HTTP/1.1
> Host: localhost:5000
> User-Agent: curl/7.68.0
> Accept: */*
* Mark bundle as not supporting multiuse
< HTTP/1.1 200
< Vary: Origin
< Vary: Access-Control-Request-Method
< Vary: Access-Control-Request-Headers
< Content-Type: application/json
< Transfer-Encoding: chunked
< Date: Sat, 22 Jan 2022 10:05:31 GMT
<
* Connection #0 to host localhost left intact
{<Data>}

Solution

  • Something with SimpleClientHttpRequestFactory just didn't play nicely, I switched it to HttpComponentsClientHttpRequestFactory instead and now it works just fine.

    String url = "http://localhost:5000/getMyObject";
    HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory ();
    RestTemplate restTemplate = new RestTemplate(factory);
    
    String result = restTemplate.getForObject(url, String.class);