Class RestTemplateBuilder

java.lang.Object
org.springframework.boot.web.client.RestTemplateBuilder

public class RestTemplateBuilder extends Object
Builder that can be used to configure and create a RestTemplate. Provides convenience methods to register converters, error handlers and UriTemplateHandlers.

By default, the built RestTemplate will attempt to use the most suitable ClientHttpRequestFactory, call detectRequestFactory(false) if you prefer to keep the default. In a typical auto-configured Spring Boot application this builder is available as a bean and can be injected whenever a RestTemplate is needed.

Since:
1.4.0
  • Constructor Details

  • Method Details

    • detectRequestFactory

      public RestTemplateBuilder detectRequestFactory(boolean detectRequestFactory)
      Set if the ClientHttpRequestFactory should be detected based on the classpath. Default if true.
      Parameters:
      detectRequestFactory - if the ClientHttpRequestFactory should be detected
      Returns:
      a new builder instance
    • rootUri

      public RestTemplateBuilder rootUri(String rootUri)
      Set a root URL that should be applied to each request that starts with '/'. The root URL will only apply when String variants of the RestTemplate methods are used for specifying the request URL.
      Parameters:
      rootUri - the root URI or null
      Returns:
      a new builder instance
    • messageConverters

      public RestTemplateBuilder messageConverters(org.springframework.http.converter.HttpMessageConverter<?>... messageConverters)
      Set the HttpMessageConverters that should be used with the RestTemplate. Setting this value will replace any previously configured converters and any converters configured on the builder will replace RestTemplate's default converters.
      Parameters:
      messageConverters - the converters to set
      Returns:
      a new builder instance
      See Also:
    • messageConverters

      public RestTemplateBuilder messageConverters(Collection<? extends org.springframework.http.converter.HttpMessageConverter<?>> messageConverters)
      Set the HttpMessageConverters that should be used with the RestTemplate. Setting this value will replace any previously configured converters and any converters configured on the builder will replace RestTemplate's default converters.
      Parameters:
      messageConverters - the converters to set
      Returns:
      a new builder instance
      See Also:
    • additionalMessageConverters

      public RestTemplateBuilder additionalMessageConverters(org.springframework.http.converter.HttpMessageConverter<?>... messageConverters)
      Add additional HttpMessageConverters that should be used with the RestTemplate. Any converters configured on the builder will replace RestTemplate's default converters.
      Parameters:
      messageConverters - the converters to add
      Returns:
      a new builder instance
      See Also:
    • additionalMessageConverters

      public RestTemplateBuilder additionalMessageConverters(Collection<? extends org.springframework.http.converter.HttpMessageConverter<?>> messageConverters)
      Add additional HttpMessageConverters that should be used with the RestTemplate. Any converters configured on the builder will replace RestTemplate's default converters.
      Parameters:
      messageConverters - the converters to add
      Returns:
      a new builder instance
      See Also:
    • defaultMessageConverters

      public RestTemplateBuilder defaultMessageConverters()
      Set the HttpMessageConverters that should be used with the RestTemplate to the default set. Calling this method will replace any previously defined converters.
      Returns:
      a new builder instance
      See Also:
    • interceptors

      public RestTemplateBuilder interceptors(org.springframework.http.client.ClientHttpRequestInterceptor... interceptors)
      Set the ClientHttpRequestInterceptors that should be used with the RestTemplate. Setting this value will replace any previously defined interceptors.
      Parameters:
      interceptors - the interceptors to set
      Returns:
      a new builder instance
      Since:
      1.4.1
      See Also:
    • interceptors

      public RestTemplateBuilder interceptors(Collection<org.springframework.http.client.ClientHttpRequestInterceptor> interceptors)
      Set the ClientHttpRequestInterceptors that should be used with the RestTemplate. Setting this value will replace any previously defined interceptors.
      Parameters:
      interceptors - the interceptors to set
      Returns:
      a new builder instance
      Since:
      1.4.1
      See Also:
    • additionalInterceptors

      public RestTemplateBuilder additionalInterceptors(org.springframework.http.client.ClientHttpRequestInterceptor... interceptors)
      Add additional ClientHttpRequestInterceptors that should be used with the RestTemplate.
      Parameters:
      interceptors - the interceptors to add
      Returns:
      a new builder instance
      Since:
      1.4.1
      See Also:
    • additionalInterceptors

      public RestTemplateBuilder additionalInterceptors(Collection<? extends org.springframework.http.client.ClientHttpRequestInterceptor> interceptors)
      Add additional ClientHttpRequestInterceptors that should be used with the RestTemplate.
      Parameters:
      interceptors - the interceptors to add
      Returns:
      a new builder instance
      Since:
      1.4.1
      See Also:
    • requestFactory

      public RestTemplateBuilder requestFactory(Class<? extends org.springframework.http.client.ClientHttpRequestFactory> requestFactoryType)
      Set the ClientHttpRequestFactory class that should be used with the RestTemplate.
      Parameters:
      requestFactoryType - the request factory type to use
      Returns:
      a new builder instance
      See Also:
    • requestFactory

      public RestTemplateBuilder requestFactory(Supplier<org.springframework.http.client.ClientHttpRequestFactory> requestFactorySupplier)
      Set the Supplier of ClientHttpRequestFactory that should be called each time we build() a new RestTemplate instance.
      Parameters:
      requestFactorySupplier - the supplier for the request factory
      Returns:
      a new builder instance
      Since:
      2.0.0
      See Also:
    • requestFactory

      @Deprecated(since="3.4.0", forRemoval=true) public RestTemplateBuilder requestFactory(Function<ClientHttpRequestFactorySettings,org.springframework.http.client.ClientHttpRequestFactory> requestFactoryFunction)
      Deprecated, for removal: This API element is subject to removal in a future version.
      since 3.4.0 for removal in 3.6.0 in favor of requestFactoryBuilder(ClientHttpRequestFactoryBuilder)
      Set the request factory function that should be called to provide a ClientHttpRequestFactory each time we build() a new RestTemplate instance.
      Parameters:
      requestFactoryFunction - the settings to request factory function
      Returns:
      a new builder instance
      Since:
      3.0.0
      See Also:
    • requestFactoryBuilder

      public RestTemplateBuilder requestFactoryBuilder(ClientHttpRequestFactoryBuilder<?> requestFactoryBuilder)
      Set the ClientHttpRequestFactoryBuilder that should be used each time we build() a new RestTemplate instance.
      Parameters:
      requestFactoryBuilder - the ClientHttpRequestFactoryBuilder to use
      Returns:
      a new builder instance
      Since:
      3.4.0
      See Also:
    • uriTemplateHandler

      public RestTemplateBuilder uriTemplateHandler(org.springframework.web.util.UriTemplateHandler uriTemplateHandler)
      Set the UriTemplateHandler that should be used with the RestTemplate.
      Parameters:
      uriTemplateHandler - the URI template handler to use
      Returns:
      a new builder instance
    • errorHandler

      public RestTemplateBuilder errorHandler(org.springframework.web.client.ResponseErrorHandler errorHandler)
      Set the ResponseErrorHandler that should be used with the RestTemplate.
      Parameters:
      errorHandler - the error handler to use
      Returns:
      a new builder instance
    • basicAuthentication

      public RestTemplateBuilder basicAuthentication(String username, String password)
      Add HTTP Basic Authentication to requests with the given username/password pair, unless a custom Authorization header has been set before.
      Parameters:
      username - the user name
      password - the password
      Returns:
      a new builder instance
      Since:
      2.1.0
      See Also:
    • basicAuthentication

      public RestTemplateBuilder basicAuthentication(String username, String password, Charset charset)
      Add HTTP Basic Authentication to requests with the given username/password pair, unless a custom Authorization header has been set before.
      Parameters:
      username - the user name
      password - the password
      charset - the charset to use
      Returns:
      a new builder instance
      Since:
      2.2.0
    • defaultHeader

      public RestTemplateBuilder defaultHeader(String name, String... values)
      Add a default header that will be set if not already present on the outgoing ClientHttpRequest.
      Parameters:
      name - the name of the header
      values - the header values
      Returns:
      a new builder instance
      Since:
      2.2.0
    • requestFactorySettings

      public RestTemplateBuilder requestFactorySettings(ClientHttpRequestFactorySettings requestFactorySettings)
      Sets the ClientHttpRequestFactorySettings. This will replace any previously set connectTimeout, readTimeout and sslBundle values.
      Parameters:
      requestFactorySettings - the request factory settings
      Returns:
      a new builder instance
      Since:
      3.4.0
    • requestFactorySettings

      public RestTemplateBuilder requestFactorySettings(UnaryOperator<ClientHttpRequestFactorySettings> requestFactorySettingsCustomizer)
      Update the ClientHttpRequestFactorySettings using the given customizer.
      Parameters:
      requestFactorySettingsCustomizer - a UnaryOperator to update request factory settings
      Returns:
      a new builder instance
      Since:
      3.4.1
    • setConnectTimeout

      @Deprecated(since="3.4.0", forRemoval=true) public RestTemplateBuilder setConnectTimeout(Duration connectTimeout)
      Deprecated, for removal: This API element is subject to removal in a future version.
      since 3.4.0 for removal in 3.6.0 in favor of connectTimeout(Duration)
      Sets the connection timeout on the underlying ClientHttpRequestFactory.
      Parameters:
      connectTimeout - the connection timeout
      Returns:
      a new builder instance.
      Since:
      2.1.0
    • connectTimeout

      public RestTemplateBuilder connectTimeout(Duration connectTimeout)
      Sets the connection timeout on the underlying ClientHttpRequestFactory.
      Parameters:
      connectTimeout - the connection timeout
      Returns:
      a new builder instance.
      Since:
      3.4.0
    • setReadTimeout

      @Deprecated(since="3.4.0", forRemoval=true) public RestTemplateBuilder setReadTimeout(Duration readTimeout)
      Deprecated, for removal: This API element is subject to removal in a future version.
      since 3.4.0 for removal in 3.6.0 in favor of readTimeout(Duration)
      Sets the read timeout on the underlying ClientHttpRequestFactory.
      Parameters:
      readTimeout - the read timeout
      Returns:
      a new builder instance.
      Since:
      2.1.0
    • readTimeout

      public RestTemplateBuilder readTimeout(Duration readTimeout)
      Sets the read timeout on the underlying ClientHttpRequestFactory.
      Parameters:
      readTimeout - the read timeout
      Returns:
      a new builder instance.
      Since:
      3.4.0
    • redirects

      Sets the redirect strategy on the underlying ClientHttpRequestFactory.
      Parameters:
      redirects - the redirect strategy
      Returns:
      a new builder instance.
      Since:
      3.4.1
    • setSslBundle

      @Deprecated(since="3.4.0", forRemoval=true) public RestTemplateBuilder setSslBundle(SslBundle sslBundle)
      Deprecated, for removal: This API element is subject to removal in a future version.
      since 3.4.0 for removal in 3.6.0 in favor of sslBundle(SslBundle)
      Sets the SSL bundle on the underlying ClientHttpRequestFactory.
      Parameters:
      sslBundle - the SSL bundle
      Returns:
      a new builder instance
      Since:
      3.1.0
    • sslBundle

      public RestTemplateBuilder sslBundle(SslBundle sslBundle)
      Sets the SSL bundle on the underlying ClientHttpRequestFactory.
      Parameters:
      sslBundle - the SSL bundle
      Returns:
      a new builder instance
      Since:
      3.4.0
    • customizers

      public RestTemplateBuilder customizers(RestTemplateCustomizer... customizers)
      Set the RestTemplateCustomizers that should be applied to the RestTemplate. Customizers are applied in the order that they were added after builder configuration has been applied. Setting this value will replace any previously configured customizers.
      Parameters:
      customizers - the customizers to set
      Returns:
      a new builder instance
      See Also:
    • customizers

      public RestTemplateBuilder customizers(Collection<? extends RestTemplateCustomizer> customizers)
      Set the RestTemplateCustomizers that should be applied to the RestTemplate. Customizers are applied in the order that they were added after builder configuration has been applied. Setting this value will replace any previously configured customizers.
      Parameters:
      customizers - the customizers to set
      Returns:
      a new builder instance
      See Also:
    • additionalCustomizers

      public RestTemplateBuilder additionalCustomizers(RestTemplateCustomizer... customizers)
      Add RestTemplateCustomizers that should be applied to the RestTemplate. Customizers are applied in the order that they were added after builder configuration has been applied.
      Parameters:
      customizers - the customizers to add
      Returns:
      a new builder instance
      See Also:
    • additionalCustomizers

      public RestTemplateBuilder additionalCustomizers(Collection<? extends RestTemplateCustomizer> customizers)
      Add RestTemplateCustomizers that should be applied to the RestTemplate. Customizers are applied in the order that they were added after builder configuration has been applied.
      Parameters:
      customizers - the customizers to add
      Returns:
      a new builder instance
      See Also:
    • requestCustomizers

      public RestTemplateBuilder requestCustomizers(RestTemplateRequestCustomizer<?>... requestCustomizers)
      Set the RestTemplateRequestCustomizers that should be applied to the ClientHttpRequest. Customizers are applied in the order that they were added. Setting this value will replace any previously configured request customizers.
      Parameters:
      requestCustomizers - the request customizers to set
      Returns:
      a new builder instance
      Since:
      2.2.0
      See Also:
    • requestCustomizers

      public RestTemplateBuilder requestCustomizers(Collection<? extends RestTemplateRequestCustomizer<?>> requestCustomizers)
      Set the RestTemplateRequestCustomizers that should be applied to the ClientHttpRequest. Customizers are applied in the order that they were added. Setting this value will replace any previously configured request customizers.
      Parameters:
      requestCustomizers - the request customizers to set
      Returns:
      a new builder instance
      Since:
      2.2.0
      See Also:
    • additionalRequestCustomizers

      public RestTemplateBuilder additionalRequestCustomizers(RestTemplateRequestCustomizer<?>... requestCustomizers)
      Add the RestTemplateRequestCustomizers that should be applied to the ClientHttpRequest. Customizers are applied in the order that they were added.
      Parameters:
      requestCustomizers - the request customizers to add
      Returns:
      a new builder instance
      Since:
      2.2.0
      See Also:
    • additionalRequestCustomizers

      public RestTemplateBuilder additionalRequestCustomizers(Collection<? extends RestTemplateRequestCustomizer<?>> requestCustomizers)
      Add the RestTemplateRequestCustomizers that should be applied to the ClientHttpRequest. Customizers are applied in the order that they were added.
      Parameters:
      requestCustomizers - the request customizers to add
      Returns:
      a new builder instance
      Since:
      2.2.0
      See Also:
    • build

      public org.springframework.web.client.RestTemplate build()
      Build a new RestTemplate instance and configure it using this builder.
      Returns:
      a configured RestTemplate instance.
      See Also:
    • build

      public <T extends org.springframework.web.client.RestTemplate> T build(Class<T> restTemplateClass)
      Build a new RestTemplate instance of the specified type and configure it using this builder.
      Type Parameters:
      T - the type of rest template
      Parameters:
      restTemplateClass - the template type to create
      Returns:
      a configured RestTemplate instance.
      See Also:
    • configure

      public <T extends org.springframework.web.client.RestTemplate> T configure(T restTemplate)
      Configure the provided RestTemplate instance using this builder.
      Type Parameters:
      T - the type of rest template
      Parameters:
      restTemplate - the RestTemplate to configure
      Returns:
      the rest template instance
      See Also:
    • buildRequestFactory

      public org.springframework.http.client.ClientHttpRequestFactory buildRequestFactory()
      Build a new ClientHttpRequestFactory instance using the settings of this builder.
      Returns:
      a ClientHttpRequestFactory or null
      Since:
      2.2.0