org.springframework.web.client
Class RestTemplate

java.lang.Object
  extended by org.springframework.http.client.support.HttpAccessor
      extended by org.springframework.web.client.RestTemplate
All Implemented Interfaces:
RestOperations

public class RestTemplate
extends HttpAccessor
implements RestOperations

The central class for client-side HTTP access. It simplifies communication with HTTP servers, and enforces RESTful principles. It handles HTTP connections, leaving application code to provide URLs (with possible template variables) and extract results.

The main entry points of this template are the methods named after the six main HTTP methods:

HTTP methodRestTemplate methods
DELETEdelete(java.lang.String, java.lang.Object...)
GETgetForObject(java.lang.String, java.lang.Class, java.lang.Object...)
getForEntity(java.lang.String, java.lang.Class, java.lang.Object...)
HEADheadForHeaders(java.lang.String, java.lang.Object...)
OPTIONSoptionsForAllow(java.lang.String, java.lang.Object...)
POSTpostForLocation(java.lang.String, java.lang.Object, java.lang.Object...)
postForObject(java.lang.String, java.lang.Object, java.lang.Class, java.lang.Object...)
PUTput(java.lang.String, java.lang.Object, java.lang.Object...)
anyexchange(java.lang.String, org.springframework.http.HttpMethod, org.springframework.http.HttpEntity, java.lang.Class, java.lang.Object...)
execute(java.lang.String, org.springframework.http.HttpMethod, org.springframework.web.client.RequestCallback, org.springframework.web.client.ResponseExtractor, java.lang.Object...)

For each of these HTTP methods, there are three corresponding Java methods in the RestTemplate. Two variant take a String URI as first argument (eg. getForObject(String, Class, Object[]), getForObject(String, Class, Map)), and are capable of substituting any URI templates in that URL using either a String variable arguments array, or a Map<String, String>. The string varargs variant expands the given template variables in order, so that

 String result = restTemplate.getForObject("http://example.com/hotels/{hotel}/bookings/{booking}", String.class,"42",
 "21");
 
will perform a GET on http://example.com/hotels/42/bookings/21. The map variant expands the template based on variable name, and is therefore more useful when using many variables, or when a single variable is used multiple times. For example:
 Map<String, String> vars = Collections.singletonMap("hotel", "42");
 String result = restTemplate.getForObject("http://example.com/hotels/{hotel}/rooms/{hotel}", String.class, vars);
 
will perform a GET on http://example.com/hotels/42/rooms/42. Alternatively, there are URI variant methods (getForObject(URI, Class)), which do not allow for URI templates, but allow you to reuse a single, expanded URI multiple times.

Furthermore, the String-argument methods assume that the URL String is unencoded. This means that

 restTemplate.getForObject("http://example.com/hotel list");
 
will perform a GET on http://example.com/hotel%20list. As a result, any URL passed that is already encoded will be encoded twice (i.e. http://example.com/hotel%20list will become http://example.com/hotel%2520list). If this behavior is undesirable, use the URI-argument methods, which will not perform any URL encoding.

Objects passed to and returned from these methods are converted to and from HTTP messages by HttpMessageConverter instances. Converters for the main mime types are registered by default, but you can also write your own converter and register it via the messageConverters bean property.

This template uses a SimpleClientHttpRequestFactory and a DefaultResponseErrorHandler as default strategies for creating HTTP connections or handling HTTP errors, respectively. These defaults can be overridden through the requestFactory and errorHandler bean properties.

Since:
3.0
See Also:
HttpMessageConverter, RequestCallback, ResponseExtractor, ResponseErrorHandler

Field Summary
 
Fields inherited from class org.springframework.http.client.support.HttpAccessor
logger
 
Constructor Summary
RestTemplate()
          Create a new instance of the RestTemplate using default settings.
RestTemplate(ClientHttpRequestFactory requestFactory)
          Create a new instance of the RestTemplate based on the given ClientHttpRequestFactory.
 
Method Summary
 void delete(java.lang.String url, java.util.Map<java.lang.String,?> urlVariables)
           
 void delete(java.lang.String url, java.lang.Object... urlVariables)
           
 void delete(java.net.URI url)
           
protected
<T> T
doExecute(java.net.URI url, HttpMethod method, RequestCallback requestCallback, ResponseExtractor<T> responseExtractor)
          Execute the given method on the provided URI.
<T> ResponseEntity<T>
exchange(java.lang.String url, HttpMethod method, HttpEntity<?> requestEntity, java.lang.Class<T> responseType, java.util.Map<java.lang.String,?> uriVariables)
           
<T> ResponseEntity<T>
exchange(java.lang.String url, HttpMethod method, HttpEntity<?> requestEntity, java.lang.Class<T> responseType, java.lang.Object... uriVariables)
           
<T> ResponseEntity<T>
exchange(java.net.URI url, HttpMethod method, HttpEntity<?> requestEntity, java.lang.Class<T> responseType)
           
<T> T
execute(java.lang.String url, HttpMethod method, RequestCallback requestCallback, ResponseExtractor<T> responseExtractor, java.util.Map<java.lang.String,?> urlVariables)
           
<T> T
execute(java.lang.String url, HttpMethod method, RequestCallback requestCallback, ResponseExtractor<T> responseExtractor, java.lang.Object... urlVariables)
           
<T> T
execute(java.net.URI url, HttpMethod method, RequestCallback requestCallback, ResponseExtractor<T> responseExtractor)
           
 ResponseErrorHandler getErrorHandler()
          Return the error handler.
<T> ResponseEntity<T>
getForEntity(java.lang.String url, java.lang.Class<T> responseType, java.util.Map<java.lang.String,?> urlVariables)
           
<T> ResponseEntity<T>
getForEntity(java.lang.String url, java.lang.Class<T> responseType, java.lang.Object... urlVariables)
           
<T> ResponseEntity<T>
getForEntity(java.net.URI url, java.lang.Class<T> responseType)
           
<T> T
getForObject(java.lang.String url, java.lang.Class<T> responseType, java.util.Map<java.lang.String,?> urlVariables)
           
<T> T
getForObject(java.lang.String url, java.lang.Class<T> responseType, java.lang.Object... urlVariables)
           
<T> T
getForObject(java.net.URI url, java.lang.Class<T> responseType)
           
 java.util.List<HttpMessageConverter<?>> getMessageConverters()
          Returns the message body converters.
 HttpHeaders headForHeaders(java.lang.String url, java.util.Map<java.lang.String,?> urlVariables)
           
 HttpHeaders headForHeaders(java.lang.String url, java.lang.Object... urlVariables)
           
 HttpHeaders headForHeaders(java.net.URI url)
           
 java.util.Set<HttpMethod> optionsForAllow(java.lang.String url, java.util.Map<java.lang.String,?> urlVariables)
           
 java.util.Set<HttpMethod> optionsForAllow(java.lang.String url, java.lang.Object... urlVariables)
           
 java.util.Set<HttpMethod> optionsForAllow(java.net.URI url)
           
<T> ResponseEntity<T>
postForEntity(java.lang.String url, java.lang.Object request, java.lang.Class<T> responseType, java.util.Map<java.lang.String,?> uriVariables)
           
<T> ResponseEntity<T>
postForEntity(java.lang.String url, java.lang.Object request, java.lang.Class<T> responseType, java.lang.Object... uriVariables)
           
<T> ResponseEntity<T>
postForEntity(java.net.URI url, java.lang.Object request, java.lang.Class<T> responseType)
           
 java.net.URI postForLocation(java.lang.String url, java.lang.Object request, java.util.Map<java.lang.String,?> urlVariables)
           
 java.net.URI postForLocation(java.lang.String url, java.lang.Object request, java.lang.Object... urlVariables)
           
 java.net.URI postForLocation(java.net.URI url, java.lang.Object request)
           
<T> T
postForObject(java.lang.String url, java.lang.Object request, java.lang.Class<T> responseType, java.util.Map<java.lang.String,?> uriVariables)
           
<T> T
postForObject(java.lang.String url, java.lang.Object request, java.lang.Class<T> responseType, java.lang.Object... uriVariables)
           
<T> T
postForObject(java.net.URI url, java.lang.Object request, java.lang.Class<T> responseType)
           
 void put(java.lang.String url, java.lang.Object request, java.util.Map<java.lang.String,?> urlVariables)
           
 void put(java.lang.String url, java.lang.Object request, java.lang.Object... urlVariables)
           
 void put(java.net.URI url, java.lang.Object request)
           
 void setErrorHandler(ResponseErrorHandler errorHandler)
          Set the error handler.
 void setMessageConverters(java.util.List<HttpMessageConverter<?>> messageConverters)
          Set the message body converters to use.
 
Methods inherited from class org.springframework.http.client.support.HttpAccessor
createRequest, getRequestFactory, setRequestFactory
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

RestTemplate

public RestTemplate()
Create a new instance of the RestTemplate using default settings.


RestTemplate

public RestTemplate(ClientHttpRequestFactory requestFactory)
Create a new instance of the RestTemplate based on the given ClientHttpRequestFactory.

Parameters:
requestFactory - HTTP request factory to use
See Also:
SimpleClientHttpRequestFactory, CommonsClientHttpRequestFactory
Method Detail

setMessageConverters

public void setMessageConverters(java.util.List<HttpMessageConverter<?>> messageConverters)
Set the message body converters to use. These converters are used to convert from and to HTTP requests and responses.


getMessageConverters

public java.util.List<HttpMessageConverter<?>> getMessageConverters()
Returns the message body converters. These converters are used to convert from and to HTTP requests and responses.


setErrorHandler

public void setErrorHandler(ResponseErrorHandler errorHandler)
Set the error handler.


getErrorHandler

public ResponseErrorHandler getErrorHandler()
Return the error handler. By default, this is the DefaultResponseErrorHandler.


getForObject

public <T> T getForObject(java.lang.String url,
                          java.lang.Class<T> responseType,
                          java.lang.Object... urlVariables)
               throws RestClientException
Specified by:
getForObject in interface RestOperations
Throws:
RestClientException

getForObject

public <T> T getForObject(java.lang.String url,
                          java.lang.Class<T> responseType,
                          java.util.Map<java.lang.String,?> urlVariables)
               throws RestClientException
Specified by:
getForObject in interface RestOperations
Throws:
RestClientException

getForObject

public <T> T getForObject(java.net.URI url,
                          java.lang.Class<T> responseType)
               throws RestClientException
Specified by:
getForObject in interface RestOperations
Throws:
RestClientException

getForEntity

public <T> ResponseEntity<T> getForEntity(java.lang.String url,
                                          java.lang.Class<T> responseType,
                                          java.lang.Object... urlVariables)
                               throws RestClientException
Specified by:
getForEntity in interface RestOperations
Throws:
RestClientException

getForEntity

public <T> ResponseEntity<T> getForEntity(java.lang.String url,
                                          java.lang.Class<T> responseType,
                                          java.util.Map<java.lang.String,?> urlVariables)
                               throws RestClientException
Specified by:
getForEntity in interface RestOperations
Throws:
RestClientException

getForEntity

public <T> ResponseEntity<T> getForEntity(java.net.URI url,
                                          java.lang.Class<T> responseType)
                               throws RestClientException
Specified by:
getForEntity in interface RestOperations
Throws:
RestClientException

headForHeaders

public HttpHeaders headForHeaders(java.lang.String url,
                                  java.lang.Object... urlVariables)
                           throws RestClientException
Specified by:
headForHeaders in interface RestOperations
Throws:
RestClientException

headForHeaders

public HttpHeaders headForHeaders(java.lang.String url,
                                  java.util.Map<java.lang.String,?> urlVariables)
                           throws RestClientException
Specified by:
headForHeaders in interface RestOperations
Throws:
RestClientException

headForHeaders

public HttpHeaders headForHeaders(java.net.URI url)
                           throws RestClientException
Specified by:
headForHeaders in interface RestOperations
Throws:
RestClientException

postForLocation

public java.net.URI postForLocation(java.lang.String url,
                                    java.lang.Object request,
                                    java.lang.Object... urlVariables)
                             throws RestClientException
Specified by:
postForLocation in interface RestOperations
Throws:
RestClientException

postForLocation

public java.net.URI postForLocation(java.lang.String url,
                                    java.lang.Object request,
                                    java.util.Map<java.lang.String,?> urlVariables)
                             throws RestClientException
Specified by:
postForLocation in interface RestOperations
Throws:
RestClientException

postForLocation

public java.net.URI postForLocation(java.net.URI url,
                                    java.lang.Object request)
                             throws RestClientException
Specified by:
postForLocation in interface RestOperations
Throws:
RestClientException

postForObject

public <T> T postForObject(java.lang.String url,
                           java.lang.Object request,
                           java.lang.Class<T> responseType,
                           java.lang.Object... uriVariables)
                throws RestClientException
Specified by:
postForObject in interface RestOperations
Throws:
RestClientException

postForObject

public <T> T postForObject(java.lang.String url,
                           java.lang.Object request,
                           java.lang.Class<T> responseType,
                           java.util.Map<java.lang.String,?> uriVariables)
                throws RestClientException
Specified by:
postForObject in interface RestOperations
Throws:
RestClientException

postForObject

public <T> T postForObject(java.net.URI url,
                           java.lang.Object request,
                           java.lang.Class<T> responseType)
                throws RestClientException
Specified by:
postForObject in interface RestOperations
Throws:
RestClientException

postForEntity

public <T> ResponseEntity<T> postForEntity(java.lang.String url,
                                           java.lang.Object request,
                                           java.lang.Class<T> responseType,
                                           java.lang.Object... uriVariables)
                                throws RestClientException
Specified by:
postForEntity in interface RestOperations
Throws:
RestClientException

postForEntity

public <T> ResponseEntity<T> postForEntity(java.lang.String url,
                                           java.lang.Object request,
                                           java.lang.Class<T> responseType,
                                           java.util.Map<java.lang.String,?> uriVariables)
                                throws RestClientException
Specified by:
postForEntity in interface RestOperations
Throws:
RestClientException

postForEntity

public <T> ResponseEntity<T> postForEntity(java.net.URI url,
                                           java.lang.Object request,
                                           java.lang.Class<T> responseType)
                                throws RestClientException
Specified by:
postForEntity in interface RestOperations
Throws:
RestClientException

put

public void put(java.lang.String url,
                java.lang.Object request,
                java.lang.Object... urlVariables)
         throws RestClientException
Specified by:
put in interface RestOperations
Throws:
RestClientException

put

public void put(java.lang.String url,
                java.lang.Object request,
                java.util.Map<java.lang.String,?> urlVariables)
         throws RestClientException
Specified by:
put in interface RestOperations
Throws:
RestClientException

put

public void put(java.net.URI url,
                java.lang.Object request)
         throws RestClientException
Specified by:
put in interface RestOperations
Throws:
RestClientException

delete

public void delete(java.lang.String url,
                   java.lang.Object... urlVariables)
            throws RestClientException
Specified by:
delete in interface RestOperations
Throws:
RestClientException

delete

public void delete(java.lang.String url,
                   java.util.Map<java.lang.String,?> urlVariables)
            throws RestClientException
Specified by:
delete in interface RestOperations
Throws:
RestClientException

delete

public void delete(java.net.URI url)
            throws RestClientException
Specified by:
delete in interface RestOperations
Throws:
RestClientException

optionsForAllow

public java.util.Set<HttpMethod> optionsForAllow(java.lang.String url,
                                                 java.lang.Object... urlVariables)
                                          throws RestClientException
Specified by:
optionsForAllow in interface RestOperations
Throws:
RestClientException

optionsForAllow

public java.util.Set<HttpMethod> optionsForAllow(java.lang.String url,
                                                 java.util.Map<java.lang.String,?> urlVariables)
                                          throws RestClientException
Specified by:
optionsForAllow in interface RestOperations
Throws:
RestClientException

optionsForAllow

public java.util.Set<HttpMethod> optionsForAllow(java.net.URI url)
                                          throws RestClientException
Specified by:
optionsForAllow in interface RestOperations
Throws:
RestClientException

exchange

public <T> ResponseEntity<T> exchange(java.lang.String url,
                                      HttpMethod method,
                                      HttpEntity<?> requestEntity,
                                      java.lang.Class<T> responseType,
                                      java.lang.Object... uriVariables)
                           throws RestClientException
Specified by:
exchange in interface RestOperations
Throws:
RestClientException

exchange

public <T> ResponseEntity<T> exchange(java.lang.String url,
                                      HttpMethod method,
                                      HttpEntity<?> requestEntity,
                                      java.lang.Class<T> responseType,
                                      java.util.Map<java.lang.String,?> uriVariables)
                           throws RestClientException
Specified by:
exchange in interface RestOperations
Throws:
RestClientException

exchange

public <T> ResponseEntity<T> exchange(java.net.URI url,
                                      HttpMethod method,
                                      HttpEntity<?> requestEntity,
                                      java.lang.Class<T> responseType)
                           throws RestClientException
Specified by:
exchange in interface RestOperations
Throws:
RestClientException

execute

public <T> T execute(java.lang.String url,
                     HttpMethod method,
                     RequestCallback requestCallback,
                     ResponseExtractor<T> responseExtractor,
                     java.lang.Object... urlVariables)
          throws RestClientException
Specified by:
execute in interface RestOperations
Throws:
RestClientException

execute

public <T> T execute(java.lang.String url,
                     HttpMethod method,
                     RequestCallback requestCallback,
                     ResponseExtractor<T> responseExtractor,
                     java.util.Map<java.lang.String,?> urlVariables)
          throws RestClientException
Specified by:
execute in interface RestOperations
Throws:
RestClientException

execute

public <T> T execute(java.net.URI url,
                     HttpMethod method,
                     RequestCallback requestCallback,
                     ResponseExtractor<T> responseExtractor)
          throws RestClientException
Specified by:
execute in interface RestOperations
Throws:
RestClientException

doExecute

protected <T> T doExecute(java.net.URI url,
                          HttpMethod method,
                          RequestCallback requestCallback,
                          ResponseExtractor<T> responseExtractor)
               throws RestClientException
Execute the given method on the provided URI. The ClientHttpRequest is processed using the RequestCallback; the response with the ResponseExtractor.

Parameters:
url - the fully-expanded URL to connect to
method - the HTTP method to execute (GET, POST, etc.)
requestCallback - object that prepares the request (can be null)
responseExtractor - object that extracts the return value from the response (can be null)
Returns:
an arbitrary object, as returned by the ResponseExtractor
Throws:
RestClientException