1

I have a spring boot application that is running on version 2.1.7. I am trying to implement a custom rest template using Rest Template Builder in order to set connection and read timeouts. I’ve learned I need to use Rest Template Builder since I am running on 2.1.7. The code for my custom rest template is shown below. I need assistance with calling this rest template in other areas of my code since this rest template is going to be utilized by various components of my application but I need help doing so. Any advice on this would be greatly appreciated. Thanks!

public abstract class CustomRestTemplate implements RestTemplateCustomizer {

    public void customize(RestTemplate restTemplate, Integer connectTimeout, Integer readTimeout) {
        restTemplate.setRequestFactory(new SimpleClientHttpRequestFactory());
        SimpleClientHttpRequestFactory template = (SimpleClientHttpRequestFactory) restTemplate.getRequestFactory();
        template.setConnectTimeout(connectTimeout);
        template.setReadTimeout(readTimeout);
    }
}
Rashed Hasan
  • 3,721
  • 11
  • 40
  • 82
Dave Michaels
  • 847
  • 1
  • 19
  • 51

1 Answers1

5

You don't need to extend the customizer, that's an overkill. The simplest and cleanest way to do it is to create a bean of RestTemplate and inject it as a dependency.

For example, you can have a config and declare the bean there:

@Configuration
public class WebConfig {

    private int fooConnectTimeout = 4000;
    private int fooReadTimeout = 4000;

    @Bean
    public RestTemplate restTemplate(final RestTemplateBuilder builder) {
        return builder.setConnectTimeout(fooConnectTimeout)
                .setReadTimeout(fooReadTimeout)
                .build();
    }
}

Now just inject the bean in the class, like so:

@Service
public class FooService {

    private RestTemplate restTemplate;

    public FooService(RestTemplate restTemplate) {
        this.restTemplate = restTemplate;
    }

    // custom code here....
}

Hope that helps

Urosh T.
  • 3,336
  • 5
  • 34
  • 42