org.springframework.http.client

## Class SimpleClientHttpRequestFactory

- java.lang.Object
- - org.springframework.http.client.SimpleClientHttpRequestFactory

- All Implemented Interfaces:
    AsyncClientHttpRequestFactory, ClientHttpRequestFactory

      public class SimpleClientHttpRequestFactory
      extends Object
      implements ClientHttpRequestFactory, AsyncClientHttpRequestFactory

  `ClientHttpRequestFactory` implementation that uses standard JDK facilities.
  Since:
    3.0
  Author:
    Arjen Poutsma, Juergen Hoeller
  See Also:
    `HttpURLConnection`, `HttpComponentsClientHttpRequestFactory`

- - ### Constructor Summary

    Constructors
    Constructor and Description
    `SimpleClientHttpRequestFactory()`

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `AsyncClientHttpRequest` | `createAsyncRequest(URI uri, HttpMethod httpMethod)` Create a new asynchronous `AsyncClientHttpRequest` for the specified URI and HTTP method.
    `ClientHttpRequest` | `createRequest(URI uri, HttpMethod httpMethod)` Create a new `ClientHttpRequest` for the specified URI and HTTP method.
    `protected HttpURLConnection` | `openConnection(URL url, Proxy proxy)` Opens and returns a connection to the given URL.
    `protected void` | `prepareConnection(HttpURLConnection connection, String httpMethod)` Template method for preparing the given `HttpURLConnection`.
    `void` | `setBufferRequestBody(boolean bufferRequestBody)` Indicate whether this request factory should buffer the request body internally.
    `void` | `setChunkSize(int chunkSize)` Set the number of bytes to write in each chunk when not buffering request bodies locally.
    `void` | `setConnectTimeout(int connectTimeout)` Set the underlying URLConnection's connect timeout (in milliseconds).
    `void` | `setOutputStreaming(boolean outputStreaming)` Set if the underlying URLConnection can be set to 'output streaming' mode.
    `void` | `setProxy(Proxy proxy)` Set the `Proxy` to use for this request factory.
    `void` | `setReadTimeout(int readTimeout)` Set the underlying URLConnection's read timeout (in milliseconds).
    `void` | `setTaskExecutor(AsyncListenableTaskExecutor taskExecutor)` Set the task executor for this request factory.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### SimpleClientHttpRequestFactory

          public SimpleClientHttpRequestFactory()

  - ### Method Detail

    - #### setProxy

          public void setProxy(Proxy proxy)

      Set the `Proxy` to use for this request factory.

    - #### setBufferRequestBody

          public void setBufferRequestBody(boolean bufferRequestBody)

      Indicate whether this request factory should buffer the request body internally.

      Default is `true`. When sending large amounts of data via POST or PUT, it is recommended to change this property to `false`, so as not to run out of memory. This will result in a `ClientHttpRequest` that either streams directly to the underlying `HttpURLConnection` (if the `Content-Length` is known in advance), or that will use "Chunked transfer encoding" (if the `Content-Length` is not known in advance).

      See Also:
        `setChunkSize(int)`, `HttpURLConnection.setFixedLengthStreamingMode(int)`

    - #### setChunkSize

          public void setChunkSize(int chunkSize)

      Set the number of bytes to write in each chunk when not buffering request bodies locally.

      Note that this parameter is only used when `bufferRequestBody` is set to `false`, and the `Content-Length` is not known in advance.

      See Also:
        `setBufferRequestBody(boolean)`

    - #### setConnectTimeout

          public void setConnectTimeout(int connectTimeout)

      Set the underlying URLConnection's connect timeout (in milliseconds). A timeout value of 0 specifies an infinite timeout.

      Default is the system's default timeout.

      See Also:
        `URLConnection.setConnectTimeout(int)`

    - #### setReadTimeout

          public void setReadTimeout(int readTimeout)

      Set the underlying URLConnection's read timeout (in milliseconds). A timeout value of 0 specifies an infinite timeout.

      Default is the system's default timeout.

      See Also:
        `URLConnection.setReadTimeout(int)`

    - #### setOutputStreaming

          public void setOutputStreaming(boolean outputStreaming)

      Set if the underlying URLConnection can be set to 'output streaming' mode. Default is `true`.

      When output streaming is enabled, authentication and redirection cannot be handled automatically. If output streaming is disabled, the `HttpURLConnection.setFixedLengthStreamingMode(int)` and `HttpURLConnection.setChunkedStreamingMode(int)` methods of the underlying connection will never be called.

      Parameters:
        `outputStreaming` - if output streaming is enabled

    - #### setTaskExecutor

          public void setTaskExecutor(AsyncListenableTaskExecutor taskExecutor)

      Set the task executor for this request factory. Setting this property is required for creating asynchronous requests.
      Parameters:
        `taskExecutor` - the task executor

    - #### createRequest

          public ClientHttpRequest createRequest(URI uri,
                                                 HttpMethod httpMethod)
                                          throws IOException

      Description copied from interface: `ClientHttpRequestFactory`
      Create a new `ClientHttpRequest` for the specified URI and HTTP method.

      The returned request can be written to, and then executed by calling `ClientHttpRequest.execute()`.

      Specified by:
        `createRequest` in interface `ClientHttpRequestFactory`
      Parameters:
        `uri` - the URI to create a request for
        `httpMethod` - the HTTP method to execute
      Returns:
        the created request
      Throws:
        `IOException` - in case of I/O errors

    - #### createAsyncRequest

          public AsyncClientHttpRequest createAsyncRequest(URI uri,
                                                           HttpMethod httpMethod)
                                                    throws IOException

      Create a new asynchronous `AsyncClientHttpRequest` for the specified URI and HTTP method.

      The returned request can be written to, and then executed by calling `AsyncClientHttpRequest.executeAsync()`.

      Setting the `taskExecutor` property is required before calling this method.

      Specified by:
        `createAsyncRequest` in interface `AsyncClientHttpRequestFactory`
      Parameters:
        `uri` - the URI to create a request for
        `httpMethod` - the HTTP method to execute
      Returns:
        the created request
      Throws:
        `IOException` - in case of I/O errors

    - #### openConnection

          protected HttpURLConnection openConnection(URL url,
                                                     @Nullable
                                                     Proxy proxy)
                                              throws IOException

      Opens and returns a connection to the given URL.

      The default implementation uses the given proxy - if any - to open a connection.

      Parameters:
        `url` - the URL to open a connection to
        `proxy` - the proxy to use, may be `null`
      Returns:
        the opened connection
      Throws:
        `IOException` - in case of I/O errors

    - #### prepareConnection

          protected void prepareConnection(HttpURLConnection connection,
                                           String httpMethod)
                                    throws IOException

      Template method for preparing the given `HttpURLConnection`.

      The default implementation prepares the connection for input and output, and sets the HTTP method.

      Parameters:
        `connection` - the connection to prepare
        `httpMethod` - the HTTP request method (`GET`, `POST`, etc.)
      Throws:
        `IOException` - in case of I/O errors