RestTemplate
- очень универсальный объект.
Давайте начнем с execute
, так как это наиболее общий метод:
execute(String url, HttpMethod method, @Nullable RequestCallback requestCallback,
@Nullable ResponseExtractor<T> responseExtractor, Object... uriVariables)
Обратите внимание наuriVariables
также может быть передан как Map
.
execute
предназначен для применения в самых разнообразных возможных сценариях:
- Первый и второй параметры позволяютлюбая допустимая комбинация URL и метода.
- Запрос может быть изменен множеством различных способов, передавая пользовательский
RequestCallback
(@FunctionalInterface
только с одним методом doWithRequest(ClientHttpRequest request)
) перед отправкой. - Ответ, возвращенный из удаленного ресурса, можно десериализовать любым необходимым способом, передав пользовательский
ResponseExtractor
.
Сравните это с exchange
:
exchange(String url, HttpMethod method, @Nullable HttpEntity<?> requestEntity,
Class<T> responseType, Object... uriVariables)
Здесь есть два основных различия:
- Теперь вы можете передать
HttpEntity
напрямую, тогда как раньше его нужно было устанавливать вручную, используя RequestCallback
. - Механизм десериализации предоставляется из коробки, передавая желаемый ответвведите
Class
.
Как видите, это гораздо удобнее для повседневного использования.
Методы, такие как getForEntity
и postForEntity
еще короче, легче понять версии этого:
getForEntity(String url, Class<T> responseType, Object... uriVariables)
postForEntity(String url, @Nullable Object request, Class<T> responseType,
Object... uriVariables)
Уведомление postForEntity
теперь позволяет POST любой Object
напрямую без оболочки.Нет никакого выигрыша в производительности или вреде использования их вместо execute
, так как они сами называют execute
под капотом - это просто вопрос удобства.