ylbtech-Java-Class-C:org.springframework.web.client.RestTemplate
1.返回顶部
1、
org.springframework.web.client

类RestTemplate

  • 所有已实现的接口:
    RestOperations

    1. 公共类RestTemplate
    2. 扩展InterceptingHttpAccessor
    3. 实现RestOperations
    同步客户端执行HTTP请求,在底层HTTP客户端库(如JDK HttpURLConnection,Apache HttpComponents 等)上公开简单的模板方法API 。

    RestTemplate通过HTTP方法提供常见方案的模板,此外还支持不太常见的案例的通用方法exchangeexecute方法。

    注意:从5.0开始,非阻塞,无效, 为同步和异步以及流方案org.springframework.web.reactive.client.WebClient提供了RestTemplate有效支持的现代替代方案。该RestTemplate 会在未来的版本中被淘汰,并没有重大的新功能的加入前进。有关更多详细信息和示例代码,请参阅Spring Framework参考文档的WebClient部分。

2、
2.返回顶部
1.1、

import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.web.client.RestTemplate;

import java.nio.charset.StandardCharsets;

1.2、restTemplate.getForEntity()
  1. /**
  2. * 接口调用凭证
  3. * 获取小程序全局唯一后台接口调用凭据(access_token)
  4. * https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/access-token/auth.getAccessToken.html
  5. * @param appID 必填,小程序唯一凭证,即 AppID,可在「微信公众平台 - 设置 - 开发设置」页中获得。(需要已经成为开发者,且帐号没有异常状态)
  6. * @param secret 必填,小程序唯一凭证密钥,即 AppSecret,获取方式同 appid
  7. * @param restTemplate 必填
  8. * @return
  9. */
  10. public static String getAccessToken(String appID, String secret, RestTemplate restTemplate) {
  11.  
  12. String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential";
  13. String path = String.format("%s&appid=%s&secret=%s", url, appID, secret);
  14. ResponseEntity<String> entity = restTemplate.getForEntity(path, String.class);
  15. return entity.getBody();
  16. }
1.3、restTemplate.postForEntity()
  1. /**
  2. * 组合模板并添加至帐号下的个人模板库
  3. * @param access_token 必填,接口调用凭证
  4. * @param id 必填,模板标题id,可通过接口获取,也可登录小程序后台查看获取
  5. * @param keyword_id_list 必填,开发者自行组合好的模板关键词列表,关键词顺序可以自由搭配(例如[3,5,4]或[4,5,3]),最多支持10个关键词组合
  6. * @param restTemplate 必填
  7. * @return
  8. */
  9. public static String addTemplate(String access_token, String id, List<Integer> keyword_id_list, RestTemplate restTemplate) {
  10.  
  11. restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8)); // 防止中文乱码
  12. String url = "https://api.weixin.qq.com/cgi-bin/wxopen/template/add?access_token="+access_token;
  13. //请求头
  14. HttpHeaders headers = new HttpHeaders();
  15. headers.setContentType(MediaType.APPLICATION_JSON);
  16. //请求体
  17. Map<String, Object> requestParam = new HashMap<>();
  18. requestParam.put("id", id);
  19. requestParam.put("keyword_id_list",keyword_id_list);
  20.  
  21. //封装成一个请求对象
  22. HttpEntity entity = new HttpEntity(requestParam, headers);
  23. //发送数据方法
  24. ResponseEntity<String> forEntity = restTemplate.postForEntity(url, entity, String.class);
  25.  
  26. //得到返回的数据body
  27. return forEntity.getBody();
  28. }
2、
3.返回顶部
 
4.返回顶部
1、
  1. //
  2. // Source code recreated from a .class file by IntelliJ IDEA
  3. // (powered by Fernflower decompiler)
  4. //
  5.  
  6. package org.springframework.web.client;
  7.  
  8. import java.io.IOException;
  9. import java.lang.reflect.Type;
  10. import java.net.URI;
  11. import java.util.ArrayList;
  12. import java.util.Collections;
  13. import java.util.Iterator;
  14. import java.util.LinkedList;
  15. import java.util.List;
  16. import java.util.Map;
  17. import java.util.Set;
  18. import java.util.function.BiConsumer;
  19. import java.util.function.Function;
  20. import java.util.function.Predicate;
  21. import java.util.stream.Collectors;
  22. import java.util.stream.Stream;
  23. import org.springframework.core.ParameterizedTypeReference;
  24. import org.springframework.http.HttpEntity;
  25. import org.springframework.http.HttpHeaders;
  26. import org.springframework.http.HttpMethod;
  27. import org.springframework.http.HttpStatus;
  28. import org.springframework.http.MediaType;
  29. import org.springframework.http.RequestEntity;
  30. import org.springframework.http.ResponseEntity;
  31. import org.springframework.http.ResponseEntity.BodyBuilder;
  32. import org.springframework.http.client.ClientHttpRequest;
  33. import org.springframework.http.client.ClientHttpRequestFactory;
  34. import org.springframework.http.client.ClientHttpResponse;
  35. import org.springframework.http.client.support.InterceptingHttpAccessor;
  36. import org.springframework.http.converter.ByteArrayHttpMessageConverter;
  37. import org.springframework.http.converter.GenericHttpMessageConverter;
  38. import org.springframework.http.converter.HttpMessageConverter;
  39. import org.springframework.http.converter.ResourceHttpMessageConverter;
  40. import org.springframework.http.converter.StringHttpMessageConverter;
  41. import org.springframework.http.converter.cbor.MappingJackson2CborHttpMessageConverter;
  42. import org.springframework.http.converter.feed.AtomFeedHttpMessageConverter;
  43. import org.springframework.http.converter.feed.RssChannelHttpMessageConverter;
  44. import org.springframework.http.converter.json.GsonHttpMessageConverter;
  45. import org.springframework.http.converter.json.JsonbHttpMessageConverter;
  46. import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
  47. import org.springframework.http.converter.smile.MappingJackson2SmileHttpMessageConverter;
  48. import org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter;
  49. import org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter;
  50. import org.springframework.http.converter.xml.MappingJackson2XmlHttpMessageConverter;
  51. import org.springframework.http.converter.xml.SourceHttpMessageConverter;
  52. import org.springframework.lang.Nullable;
  53. import org.springframework.util.Assert;
  54. import org.springframework.util.ClassUtils;
  55. import org.springframework.web.util.AbstractUriTemplateHandler;
  56. import org.springframework.web.util.DefaultUriBuilderFactory;
  57. import org.springframework.web.util.UriTemplateHandler;
  58. import org.springframework.web.util.DefaultUriBuilderFactory.EncodingMode;
  59.  
  60. public class RestTemplate extends InterceptingHttpAccessor implements RestOperations {
  61. private static boolean romePresent;
  62. private static final boolean jaxb2Present;
  63. private static final boolean jackson2Present;
  64. private static final boolean jackson2XmlPresent;
  65. private static final boolean jackson2SmilePresent;
  66. private static final boolean jackson2CborPresent;
  67. private static final boolean gsonPresent;
  68. private static final boolean jsonbPresent;
  69. private final List<HttpMessageConverter<?>> messageConverters;
  70. private ResponseErrorHandler errorHandler;
  71. private UriTemplateHandler uriTemplateHandler;
  72. private final ResponseExtractor<HttpHeaders> headersExtractor;
  73.  
  74. public RestTemplate() {
  75. this.messageConverters = new ArrayList();
  76. this.errorHandler = new DefaultResponseErrorHandler();
  77. this.headersExtractor = new RestTemplate.HeadersExtractor();
  78. this.messageConverters.add(new ByteArrayHttpMessageConverter());
  79. this.messageConverters.add(new StringHttpMessageConverter());
  80. this.messageConverters.add(new ResourceHttpMessageConverter(false));
  81.  
  82. try {
  83. this.messageConverters.add(new SourceHttpMessageConverter());
  84. } catch (Error var2) {
  85. ;
  86. }
  87.  
  88. this.messageConverters.add(new AllEncompassingFormHttpMessageConverter());
  89. if (romePresent) {
  90. this.messageConverters.add(new AtomFeedHttpMessageConverter());
  91. this.messageConverters.add(new RssChannelHttpMessageConverter());
  92. }
  93.  
  94. if (jackson2XmlPresent) {
  95. this.messageConverters.add(new MappingJackson2XmlHttpMessageConverter());
  96. } else if (jaxb2Present) {
  97. this.messageConverters.add(new Jaxb2RootElementHttpMessageConverter());
  98. }
  99.  
  100. if (jackson2Present) {
  101. this.messageConverters.add(new MappingJackson2HttpMessageConverter());
  102. } else if (gsonPresent) {
  103. this.messageConverters.add(new GsonHttpMessageConverter());
  104. } else if (jsonbPresent) {
  105. this.messageConverters.add(new JsonbHttpMessageConverter());
  106. }
  107.  
  108. if (jackson2SmilePresent) {
  109. this.messageConverters.add(new MappingJackson2SmileHttpMessageConverter());
  110. }
  111.  
  112. if (jackson2CborPresent) {
  113. this.messageConverters.add(new MappingJackson2CborHttpMessageConverter());
  114. }
  115.  
  116. this.uriTemplateHandler = initUriTemplateHandler();
  117. }
  118.  
  119. public RestTemplate(ClientHttpRequestFactory requestFactory) {
  120. this();
  121. this.setRequestFactory(requestFactory);
  122. }
  123.  
  124. public RestTemplate(List<HttpMessageConverter<?>> messageConverters) {
  125. this.messageConverters = new ArrayList();
  126. this.errorHandler = new DefaultResponseErrorHandler();
  127. this.headersExtractor = new RestTemplate.HeadersExtractor();
  128. Assert.notEmpty(messageConverters, "At least one HttpMessageConverter required");
  129. this.messageConverters.addAll(messageConverters);
  130. this.uriTemplateHandler = initUriTemplateHandler();
  131. }
  132.  
  133. private static DefaultUriBuilderFactory initUriTemplateHandler() {
  134. DefaultUriBuilderFactory uriFactory = new DefaultUriBuilderFactory();
  135. uriFactory.setEncodingMode(EncodingMode.URI_COMPONENT);
  136. return uriFactory;
  137. }
  138.  
  139. public void setMessageConverters(List<HttpMessageConverter<?>> messageConverters) {
  140. Assert.notEmpty(messageConverters, "At least one HttpMessageConverter required");
  141. if (this.messageConverters != messageConverters) {
  142. this.messageConverters.clear();
  143. this.messageConverters.addAll(messageConverters);
  144. }
  145.  
  146. }
  147.  
  148. public List<HttpMessageConverter<?>> getMessageConverters() {
  149. return this.messageConverters;
  150. }
  151.  
  152. public void setErrorHandler(ResponseErrorHandler errorHandler) {
  153. Assert.notNull(errorHandler, "ResponseErrorHandler must not be null");
  154. this.errorHandler = errorHandler;
  155. }
  156.  
  157. public ResponseErrorHandler getErrorHandler() {
  158. return this.errorHandler;
  159. }
  160.  
  161. public void setDefaultUriVariables(Map<String, ?> uriVars) {
  162. if (this.uriTemplateHandler instanceof DefaultUriBuilderFactory) {
  163. ((DefaultUriBuilderFactory)this.uriTemplateHandler).setDefaultUriVariables(uriVars);
  164. } else {
  165. if (!(this.uriTemplateHandler instanceof AbstractUriTemplateHandler)) {
  166. throw new IllegalArgumentException("This property is not supported with the configured UriTemplateHandler.");
  167. }
  168.  
  169. ((AbstractUriTemplateHandler)this.uriTemplateHandler).setDefaultUriVariables(uriVars);
  170. }
  171.  
  172. }
  173.  
  174. public void setUriTemplateHandler(UriTemplateHandler handler) {
  175. Assert.notNull(handler, "UriTemplateHandler must not be null");
  176. this.uriTemplateHandler = handler;
  177. }
  178.  
  179. public UriTemplateHandler getUriTemplateHandler() {
  180. return this.uriTemplateHandler;
  181. }
  182.  
  183. @Nullable
  184. public <T> T getForObject(String url, Class<T> responseType, Object... uriVariables) throws RestClientException {
  185. RequestCallback requestCallback = this.acceptHeaderRequestCallback(responseType);
  186. HttpMessageConverterExtractor<T> responseExtractor = new HttpMessageConverterExtractor(responseType, this.getMessageConverters(), this.logger);
  187. return this.execute(url, HttpMethod.GET, requestCallback, responseExtractor, (Object[])uriVariables);
  188. }
  189.  
  190. @Nullable
  191. public <T> T getForObject(String url, Class<T> responseType, Map<String, ?> uriVariables) throws RestClientException {
  192. RequestCallback requestCallback = this.acceptHeaderRequestCallback(responseType);
  193. HttpMessageConverterExtractor<T> responseExtractor = new HttpMessageConverterExtractor(responseType, this.getMessageConverters(), this.logger);
  194. return this.execute(url, HttpMethod.GET, requestCallback, responseExtractor, (Map)uriVariables);
  195. }
  196.  
  197. @Nullable
  198. public <T> T getForObject(URI url, Class<T> responseType) throws RestClientException {
  199. RequestCallback requestCallback = this.acceptHeaderRequestCallback(responseType);
  200. HttpMessageConverterExtractor<T> responseExtractor = new HttpMessageConverterExtractor(responseType, this.getMessageConverters(), this.logger);
  201. return this.execute(url, HttpMethod.GET, requestCallback, responseExtractor);
  202. }
  203.  
  204. public <T> ResponseEntity<T> getForEntity(String url, Class<T> responseType, Object... uriVariables) throws RestClientException {
  205. RequestCallback requestCallback = this.acceptHeaderRequestCallback(responseType);
  206. ResponseExtractor<ResponseEntity<T>> responseExtractor = this.responseEntityExtractor(responseType);
  207. return (ResponseEntity)nonNull(this.execute(url, HttpMethod.GET, requestCallback, responseExtractor, uriVariables));
  208. }
  209.  
  210. public <T> ResponseEntity<T> getForEntity(String url, Class<T> responseType, Map<String, ?> uriVariables) throws RestClientException {
  211. RequestCallback requestCallback = this.acceptHeaderRequestCallback(responseType);
  212. ResponseExtractor<ResponseEntity<T>> responseExtractor = this.responseEntityExtractor(responseType);
  213. return (ResponseEntity)nonNull(this.execute(url, HttpMethod.GET, requestCallback, responseExtractor, uriVariables));
  214. }
  215.  
  216. public <T> ResponseEntity<T> getForEntity(URI url, Class<T> responseType) throws RestClientException {
  217. RequestCallback requestCallback = this.acceptHeaderRequestCallback(responseType);
  218. ResponseExtractor<ResponseEntity<T>> responseExtractor = this.responseEntityExtractor(responseType);
  219. return (ResponseEntity)nonNull(this.execute(url, HttpMethod.GET, requestCallback, responseExtractor));
  220. }
  221.  
  222. public HttpHeaders headForHeaders(String url, Object... uriVariables) throws RestClientException {
  223. return (HttpHeaders)nonNull(this.execute(url, HttpMethod.HEAD, (RequestCallback)null, this.headersExtractor(), (Object[])uriVariables));
  224. }
  225.  
  226. public HttpHeaders headForHeaders(String url, Map<String, ?> uriVariables) throws RestClientException {
  227. return (HttpHeaders)nonNull(this.execute(url, HttpMethod.HEAD, (RequestCallback)null, this.headersExtractor(), (Map)uriVariables));
  228. }
  229.  
  230. public HttpHeaders headForHeaders(URI url) throws RestClientException {
  231. return (HttpHeaders)nonNull(this.execute(url, HttpMethod.HEAD, (RequestCallback)null, this.headersExtractor()));
  232. }
  233.  
  234. @Nullable
  235. public URI postForLocation(String url, @Nullable Object request, Object... uriVariables) throws RestClientException {
  236. RequestCallback requestCallback = this.httpEntityCallback(request);
  237. HttpHeaders headers = (HttpHeaders)this.execute(url, HttpMethod.POST, requestCallback, this.headersExtractor(), uriVariables);
  238. return headers != null ? headers.getLocation() : null;
  239. }
  240.  
  241. @Nullable
  242. public URI postForLocation(String url, @Nullable Object request, Map<String, ?> uriVariables) throws RestClientException {
  243. RequestCallback requestCallback = this.httpEntityCallback(request);
  244. HttpHeaders headers = (HttpHeaders)this.execute(url, HttpMethod.POST, requestCallback, this.headersExtractor(), uriVariables);
  245. return headers != null ? headers.getLocation() : null;
  246. }
  247.  
  248. @Nullable
  249. public URI postForLocation(URI url, @Nullable Object request) throws RestClientException {
  250. RequestCallback requestCallback = this.httpEntityCallback(request);
  251. HttpHeaders headers = (HttpHeaders)this.execute(url, HttpMethod.POST, requestCallback, this.headersExtractor());
  252. return headers != null ? headers.getLocation() : null;
  253. }
  254.  
  255. @Nullable
  256. public <T> T postForObject(String url, @Nullable Object request, Class<T> responseType, Object... uriVariables) throws RestClientException {
  257. RequestCallback requestCallback = this.httpEntityCallback(request, responseType);
  258. HttpMessageConverterExtractor<T> responseExtractor = new HttpMessageConverterExtractor(responseType, this.getMessageConverters(), this.logger);
  259. return this.execute(url, HttpMethod.POST, requestCallback, responseExtractor, (Object[])uriVariables);
  260. }
  261.  
  262. @Nullable
  263. public <T> T postForObject(String url, @Nullable Object request, Class<T> responseType, Map<String, ?> uriVariables) throws RestClientException {
  264. RequestCallback requestCallback = this.httpEntityCallback(request, responseType);
  265. HttpMessageConverterExtractor<T> responseExtractor = new HttpMessageConverterExtractor(responseType, this.getMessageConverters(), this.logger);
  266. return this.execute(url, HttpMethod.POST, requestCallback, responseExtractor, (Map)uriVariables);
  267. }
  268.  
  269. @Nullable
  270. public <T> T postForObject(URI url, @Nullable Object request, Class<T> responseType) throws RestClientException {
  271. RequestCallback requestCallback = this.httpEntityCallback(request, responseType);
  272. HttpMessageConverterExtractor<T> responseExtractor = new HttpMessageConverterExtractor(responseType, this.getMessageConverters());
  273. return this.execute(url, HttpMethod.POST, requestCallback, responseExtractor);
  274. }
  275.  
  276. public <T> ResponseEntity<T> postForEntity(String url, @Nullable Object request, Class<T> responseType, Object... uriVariables) throws RestClientException {
  277. RequestCallback requestCallback = this.httpEntityCallback(request, responseType);
  278. ResponseExtractor<ResponseEntity<T>> responseExtractor = this.responseEntityExtractor(responseType);
  279. return (ResponseEntity)nonNull(this.execute(url, HttpMethod.POST, requestCallback, responseExtractor, uriVariables));
  280. }
  281.  
  282. public <T> ResponseEntity<T> postForEntity(String url, @Nullable Object request, Class<T> responseType, Map<String, ?> uriVariables) throws RestClientException {
  283. RequestCallback requestCallback = this.httpEntityCallback(request, responseType);
  284. ResponseExtractor<ResponseEntity<T>> responseExtractor = this.responseEntityExtractor(responseType);
  285. return (ResponseEntity)nonNull(this.execute(url, HttpMethod.POST, requestCallback, responseExtractor, uriVariables));
  286. }
  287.  
  288. public <T> ResponseEntity<T> postForEntity(URI url, @Nullable Object request, Class<T> responseType) throws RestClientException {
  289. RequestCallback requestCallback = this.httpEntityCallback(request, responseType);
  290. ResponseExtractor<ResponseEntity<T>> responseExtractor = this.responseEntityExtractor(responseType);
  291. return (ResponseEntity)nonNull(this.execute(url, HttpMethod.POST, requestCallback, responseExtractor));
  292. }
  293.  
  294. public void put(String url, @Nullable Object request, Object... uriVariables) throws RestClientException {
  295. RequestCallback requestCallback = this.httpEntityCallback(request);
  296. this.execute(url, HttpMethod.PUT, requestCallback, (ResponseExtractor)null, (Object[])uriVariables);
  297. }
  298.  
  299. public void put(String url, @Nullable Object request, Map<String, ?> uriVariables) throws RestClientException {
  300. RequestCallback requestCallback = this.httpEntityCallback(request);
  301. this.execute(url, HttpMethod.PUT, requestCallback, (ResponseExtractor)null, (Map)uriVariables);
  302. }
  303.  
  304. public void put(URI url, @Nullable Object request) throws RestClientException {
  305. RequestCallback requestCallback = this.httpEntityCallback(request);
  306. this.execute(url, HttpMethod.PUT, requestCallback, (ResponseExtractor)null);
  307. }
  308.  
  309. @Nullable
  310. public <T> T patchForObject(String url, @Nullable Object request, Class<T> responseType, Object... uriVariables) throws RestClientException {
  311. RequestCallback requestCallback = this.httpEntityCallback(request, responseType);
  312. HttpMessageConverterExtractor<T> responseExtractor = new HttpMessageConverterExtractor(responseType, this.getMessageConverters(), this.logger);
  313. return this.execute(url, HttpMethod.PATCH, requestCallback, responseExtractor, (Object[])uriVariables);
  314. }
  315.  
  316. @Nullable
  317. public <T> T patchForObject(String url, @Nullable Object request, Class<T> responseType, Map<String, ?> uriVariables) throws RestClientException {
  318. RequestCallback requestCallback = this.httpEntityCallback(request, responseType);
  319. HttpMessageConverterExtractor<T> responseExtractor = new HttpMessageConverterExtractor(responseType, this.getMessageConverters(), this.logger);
  320. return this.execute(url, HttpMethod.PATCH, requestCallback, responseExtractor, (Map)uriVariables);
  321. }
  322.  
  323. @Nullable
  324. public <T> T patchForObject(URI url, @Nullable Object request, Class<T> responseType) throws RestClientException {
  325. RequestCallback requestCallback = this.httpEntityCallback(request, responseType);
  326. HttpMessageConverterExtractor<T> responseExtractor = new HttpMessageConverterExtractor(responseType, this.getMessageConverters());
  327. return this.execute(url, HttpMethod.PATCH, requestCallback, responseExtractor);
  328. }
  329.  
  330. public void delete(String url, Object... uriVariables) throws RestClientException {
  331. this.execute(url, HttpMethod.DELETE, (RequestCallback)null, (ResponseExtractor)null, (Object[])uriVariables);
  332. }
  333.  
  334. public void delete(String url, Map<String, ?> uriVariables) throws RestClientException {
  335. this.execute(url, HttpMethod.DELETE, (RequestCallback)null, (ResponseExtractor)null, (Map)uriVariables);
  336. }
  337.  
  338. public void delete(URI url) throws RestClientException {
  339. this.execute(url, HttpMethod.DELETE, (RequestCallback)null, (ResponseExtractor)null);
  340. }
  341.  
  342. public Set<HttpMethod> optionsForAllow(String url, Object... uriVariables) throws RestClientException {
  343. ResponseExtractor<HttpHeaders> headersExtractor = this.headersExtractor();
  344. HttpHeaders headers = (HttpHeaders)this.execute(url, HttpMethod.OPTIONS, (RequestCallback)null, headersExtractor, (Object[])uriVariables);
  345. return headers != null ? headers.getAllow() : Collections.emptySet();
  346. }
  347.  
  348. public Set<HttpMethod> optionsForAllow(String url, Map<String, ?> uriVariables) throws RestClientException {
  349. ResponseExtractor<HttpHeaders> headersExtractor = this.headersExtractor();
  350. HttpHeaders headers = (HttpHeaders)this.execute(url, HttpMethod.OPTIONS, (RequestCallback)null, headersExtractor, (Map)uriVariables);
  351. return headers != null ? headers.getAllow() : Collections.emptySet();
  352. }
  353.  
  354. public Set<HttpMethod> optionsForAllow(URI url) throws RestClientException {
  355. ResponseExtractor<HttpHeaders> headersExtractor = this.headersExtractor();
  356. HttpHeaders headers = (HttpHeaders)this.execute(url, HttpMethod.OPTIONS, (RequestCallback)null, headersExtractor);
  357. return headers != null ? headers.getAllow() : Collections.emptySet();
  358. }
  359.  
  360. public <T> ResponseEntity<T> exchange(String url, HttpMethod method, @Nullable HttpEntity<?> requestEntity, Class<T> responseType, Object... uriVariables) throws RestClientException {
  361. RequestCallback requestCallback = this.httpEntityCallback(requestEntity, responseType);
  362. ResponseExtractor<ResponseEntity<T>> responseExtractor = this.responseEntityExtractor(responseType);
  363. return (ResponseEntity)nonNull(this.execute(url, method, requestCallback, responseExtractor, uriVariables));
  364. }
  365.  
  366. public <T> ResponseEntity<T> exchange(String url, HttpMethod method, @Nullable HttpEntity<?> requestEntity, Class<T> responseType, Map<String, ?> uriVariables) throws RestClientException {
  367. RequestCallback requestCallback = this.httpEntityCallback(requestEntity, responseType);
  368. ResponseExtractor<ResponseEntity<T>> responseExtractor = this.responseEntityExtractor(responseType);
  369. return (ResponseEntity)nonNull(this.execute(url, method, requestCallback, responseExtractor, uriVariables));
  370. }
  371.  
  372. public <T> ResponseEntity<T> exchange(URI url, HttpMethod method, @Nullable HttpEntity<?> requestEntity, Class<T> responseType) throws RestClientException {
  373. RequestCallback requestCallback = this.httpEntityCallback(requestEntity, responseType);
  374. ResponseExtractor<ResponseEntity<T>> responseExtractor = this.responseEntityExtractor(responseType);
  375. return (ResponseEntity)nonNull(this.execute(url, method, requestCallback, responseExtractor));
  376. }
  377.  
  378. public <T> ResponseEntity<T> exchange(String url, HttpMethod method, @Nullable HttpEntity<?> requestEntity, ParameterizedTypeReference<T> responseType, Object... uriVariables) throws RestClientException {
  379. Type type = responseType.getType();
  380. RequestCallback requestCallback = this.httpEntityCallback(requestEntity, type);
  381. ResponseExtractor<ResponseEntity<T>> responseExtractor = this.responseEntityExtractor(type);
  382. return (ResponseEntity)nonNull(this.execute(url, method, requestCallback, responseExtractor, uriVariables));
  383. }
  384.  
  385. public <T> ResponseEntity<T> exchange(String url, HttpMethod method, @Nullable HttpEntity<?> requestEntity, ParameterizedTypeReference<T> responseType, Map<String, ?> uriVariables) throws RestClientException {
  386. Type type = responseType.getType();
  387. RequestCallback requestCallback = this.httpEntityCallback(requestEntity, type);
  388. ResponseExtractor<ResponseEntity<T>> responseExtractor = this.responseEntityExtractor(type);
  389. return (ResponseEntity)nonNull(this.execute(url, method, requestCallback, responseExtractor, uriVariables));
  390. }
  391.  
  392. public <T> ResponseEntity<T> exchange(URI url, HttpMethod method, @Nullable HttpEntity<?> requestEntity, ParameterizedTypeReference<T> responseType) throws RestClientException {
  393. Type type = responseType.getType();
  394. RequestCallback requestCallback = this.httpEntityCallback(requestEntity, type);
  395. ResponseExtractor<ResponseEntity<T>> responseExtractor = this.responseEntityExtractor(type);
  396. return (ResponseEntity)nonNull(this.execute(url, method, requestCallback, responseExtractor));
  397. }
  398.  
  399. public <T> ResponseEntity<T> exchange(RequestEntity<?> requestEntity, Class<T> responseType) throws RestClientException {
  400. RequestCallback requestCallback = this.httpEntityCallback(requestEntity, responseType);
  401. ResponseExtractor<ResponseEntity<T>> responseExtractor = this.responseEntityExtractor(responseType);
  402. return (ResponseEntity)nonNull(this.doExecute(requestEntity.getUrl(), requestEntity.getMethod(), requestCallback, responseExtractor));
  403. }
  404.  
  405. public <T> ResponseEntity<T> exchange(RequestEntity<?> requestEntity, ParameterizedTypeReference<T> responseType) throws RestClientException {
  406. Type type = responseType.getType();
  407. RequestCallback requestCallback = this.httpEntityCallback(requestEntity, type);
  408. ResponseExtractor<ResponseEntity<T>> responseExtractor = this.responseEntityExtractor(type);
  409. return (ResponseEntity)nonNull(this.doExecute(requestEntity.getUrl(), requestEntity.getMethod(), requestCallback, responseExtractor));
  410. }
  411.  
  412. @Nullable
  413. public <T> T execute(String url, HttpMethod method, @Nullable RequestCallback requestCallback, @Nullable ResponseExtractor<T> responseExtractor, Object... uriVariables) throws RestClientException {
  414. URI expanded = this.getUriTemplateHandler().expand(url, uriVariables);
  415. return this.doExecute(expanded, method, requestCallback, responseExtractor);
  416. }
  417.  
  418. @Nullable
  419. public <T> T execute(String url, HttpMethod method, @Nullable RequestCallback requestCallback, @Nullable ResponseExtractor<T> responseExtractor, Map<String, ?> uriVariables) throws RestClientException {
  420. URI expanded = this.getUriTemplateHandler().expand(url, uriVariables);
  421. return this.doExecute(expanded, method, requestCallback, responseExtractor);
  422. }
  423.  
  424. @Nullable
  425. public <T> T execute(URI url, HttpMethod method, @Nullable RequestCallback requestCallback, @Nullable ResponseExtractor<T> responseExtractor) throws RestClientException {
  426. return this.doExecute(url, method, requestCallback, responseExtractor);
  427. }
  428.  
  429. @Nullable
  430. protected <T> T doExecute(URI url, @Nullable HttpMethod method, @Nullable RequestCallback requestCallback, @Nullable ResponseExtractor<T> responseExtractor) throws RestClientException {
  431. Assert.notNull(url, "URI is required");
  432. Assert.notNull(method, "HttpMethod is required");
  433. ClientHttpResponse response = null;
  434.  
  435. Object var14;
  436. try {
  437. ClientHttpRequest request = this.createRequest(url, method);
  438. if (requestCallback != null) {
  439. requestCallback.doWithRequest(request);
  440. }
  441.  
  442. response = request.execute();
  443. this.handleResponse(url, method, response);
  444. var14 = responseExtractor != null ? responseExtractor.extractData(response) : null;
  445. } catch (IOException var12) {
  446. String resource = url.toString();
  447. String query = url.getRawQuery();
  448. resource = query != null ? resource.substring(0, resource.indexOf(63)) : resource;
  449. throw new ResourceAccessException("I/O error on " + method.name() + " request for \"" + resource + "\": " + var12.getMessage(), var12);
  450. } finally {
  451. if (response != null) {
  452. response.close();
  453. }
  454.  
  455. }
  456.  
  457. return var14;
  458. }
  459.  
  460. protected void handleResponse(URI url, HttpMethod method, ClientHttpResponse response) throws IOException {
  461. ResponseErrorHandler errorHandler = this.getErrorHandler();
  462. boolean hasError = errorHandler.hasError(response);
  463. if (this.logger.isDebugEnabled()) {
  464. try {
  465. int code = response.getRawStatusCode();
  466. HttpStatus status = HttpStatus.resolve(code);
  467. this.logger.debug("Response " + (status != null ? status : code));
  468. } catch (IOException var8) {
  469. ;
  470. }
  471. }
  472.  
  473. if (hasError) {
  474. errorHandler.handleError(url, method, response);
  475. }
  476.  
  477. }
  478.  
  479. public <T> RequestCallback acceptHeaderRequestCallback(Class<T> responseType) {
  480. return new RestTemplate.AcceptHeaderRequestCallback(responseType);
  481. }
  482.  
  483. public <T> RequestCallback httpEntityCallback(@Nullable Object requestBody) {
  484. return new RestTemplate.HttpEntityRequestCallback(requestBody);
  485. }
  486.  
  487. public <T> RequestCallback httpEntityCallback(@Nullable Object requestBody, Type responseType) {
  488. return new RestTemplate.HttpEntityRequestCallback(requestBody, responseType);
  489. }
  490.  
  491. public <T> ResponseExtractor<ResponseEntity<T>> responseEntityExtractor(Type responseType) {
  492. return new RestTemplate.ResponseEntityResponseExtractor(responseType);
  493. }
  494.  
  495. protected ResponseExtractor<HttpHeaders> headersExtractor() {
  496. return this.headersExtractor;
  497. }
  498.  
  499. private static <T> T nonNull(@Nullable T result) {
  500. Assert.state(result != null, "No result");
  501. return result;
  502. }
  503.  
  504. static {
  505. ClassLoader classLoader = RestTemplate.class.getClassLoader();
  506. romePresent = ClassUtils.isPresent("com.rometools.rome.feed.WireFeed", classLoader);
  507. jaxb2Present = ClassUtils.isPresent("javax.xml.bind.Binder", classLoader);
  508. jackson2Present = ClassUtils.isPresent("com.fasterxml.jackson.databind.ObjectMapper", classLoader) && ClassUtils.isPresent("com.fasterxml.jackson.core.JsonGenerator", classLoader);
  509. jackson2XmlPresent = ClassUtils.isPresent("com.fasterxml.jackson.dataformat.xml.XmlMapper", classLoader);
  510. jackson2SmilePresent = ClassUtils.isPresent("com.fasterxml.jackson.dataformat.smile.SmileFactory", classLoader);
  511. jackson2CborPresent = ClassUtils.isPresent("com.fasterxml.jackson.dataformat.cbor.CBORFactory", classLoader);
  512. gsonPresent = ClassUtils.isPresent("com.google.gson.Gson", classLoader);
  513. jsonbPresent = ClassUtils.isPresent("javax.json.bind.Jsonb", classLoader);
  514. }
  515.  
  516. private static class HeadersExtractor implements ResponseExtractor<HttpHeaders> {
  517. private HeadersExtractor() {
  518. }
  519.  
  520. public HttpHeaders extractData(ClientHttpResponse response) {
  521. return response.getHeaders();
  522. }
  523. }
  524.  
  525. private class ResponseEntityResponseExtractor<T> implements ResponseExtractor<ResponseEntity<T>> {
  526. @Nullable
  527. private final HttpMessageConverterExtractor<T> delegate;
  528.  
  529. public ResponseEntityResponseExtractor(@Nullable Type responseType) {
  530. if (responseType != null && Void.class != responseType) {
  531. this.delegate = new HttpMessageConverterExtractor(responseType, RestTemplate.this.getMessageConverters(), RestTemplate.this.logger);
  532. } else {
  533. this.delegate = null;
  534. }
  535.  
  536. }
  537.  
  538. public ResponseEntity<T> extractData(ClientHttpResponse response) throws IOException {
  539. if (this.delegate != null) {
  540. T body = this.delegate.extractData(response);
  541. return ((BodyBuilder)ResponseEntity.status(response.getRawStatusCode()).headers(response.getHeaders())).body(body);
  542. } else {
  543. return ((BodyBuilder)ResponseEntity.status(response.getRawStatusCode()).headers(response.getHeaders())).build();
  544. }
  545. }
  546. }
  547.  
  548. private class HttpEntityRequestCallback extends RestTemplate.AcceptHeaderRequestCallback {
  549. private final HttpEntity<?> requestEntity;
  550.  
  551. public HttpEntityRequestCallback(@Nullable Object requestBody) {
  552. this(requestBody, (Type)null);
  553. }
  554.  
  555. public HttpEntityRequestCallback(@Nullable Object requestBody, @Nullable Type responseType) {
  556. super(responseType);
  557. if (requestBody instanceof HttpEntity) {
  558. this.requestEntity = (HttpEntity)requestBody;
  559. } else if (requestBody != null) {
  560. this.requestEntity = new HttpEntity(requestBody);
  561. } else {
  562. this.requestEntity = HttpEntity.EMPTY;
  563. }
  564.  
  565. }
  566.  
  567. public void doWithRequest(ClientHttpRequest httpRequest) throws IOException {
  568. super.doWithRequest(httpRequest);
  569. Object requestBody = this.requestEntity.getBody();
  570. if (requestBody == null) {
  571. HttpHeaders httpHeaders = httpRequest.getHeaders();
  572. HttpHeaders requestHeaders = this.requestEntity.getHeaders();
  573. if (!requestHeaders.isEmpty()) {
  574. requestHeaders.forEach((key, values) -> {
  575. httpHeaders.put(key, new LinkedList(values));
  576. });
  577. }
  578.  
  579. if (httpHeaders.getContentLength() < 0L) {
  580. httpHeaders.setContentLength(0L);
  581. }
  582.  
  583. } else {
  584. Class<?> requestBodyClass = requestBody.getClass();
  585. Type requestBodyType = this.requestEntity instanceof RequestEntity ? ((RequestEntity)this.requestEntity).getType() : requestBodyClass;
  586. HttpHeaders httpHeadersx = httpRequest.getHeaders();
  587. HttpHeaders requestHeadersx = this.requestEntity.getHeaders();
  588. MediaType requestContentType = requestHeadersx.getContentType();
  589. Iterator var8 = RestTemplate.this.getMessageConverters().iterator();
  590.  
  591. while(var8.hasNext()) {
  592. HttpMessageConverter<?> messageConverter = (HttpMessageConverter)var8.next();
  593. if (messageConverter instanceof GenericHttpMessageConverter) {
  594. GenericHttpMessageConverter<Object> genericConverter = (GenericHttpMessageConverter)messageConverter;
  595. if (genericConverter.canWrite((Type)requestBodyType, requestBodyClass, requestContentType)) {
  596. if (!requestHeadersx.isEmpty()) {
  597. requestHeadersx.forEach((key, values) -> {
  598. httpHeadersx.put(key, new LinkedList(values));
  599. });
  600. }
  601.  
  602. this.logBody(requestBody, requestContentType, genericConverter);
  603. genericConverter.write(requestBody, (Type)requestBodyType, requestContentType, httpRequest);
  604. return;
  605. }
  606. } else if (messageConverter.canWrite(requestBodyClass, requestContentType)) {
  607. if (!requestHeadersx.isEmpty()) {
  608. requestHeadersx.forEach((key, values) -> {
  609. httpHeadersx.put(key, new LinkedList(values));
  610. });
  611. }
  612.  
  613. this.logBody(requestBody, requestContentType, messageConverter);
  614. messageConverter.write(requestBody, requestContentType, httpRequest);
  615. return;
  616. }
  617. }
  618.  
  619. String message = "No HttpMessageConverter for " + requestBodyClass.getName();
  620. if (requestContentType != null) {
  621. message = message + " and content type \"" + requestContentType + "\"";
  622. }
  623.  
  624. throw new RestClientException(message);
  625. }
  626. }
  627.  
  628. private void logBody(Object body, @Nullable MediaType mediaType, HttpMessageConverter<?> converter) {
  629. if (RestTemplate.this.logger.isDebugEnabled()) {
  630. if (mediaType != null) {
  631. RestTemplate.this.logger.debug("Writing [" + body + "] as \"" + mediaType + "\"");
  632. } else {
  633. RestTemplate.this.logger.debug("Writing [" + body + "] with " + converter.getClass().getName());
  634. }
  635. }
  636.  
  637. }
  638. }
  639.  
  640. private class AcceptHeaderRequestCallback implements RequestCallback {
  641. @Nullable
  642. private final Type responseType;
  643.  
  644. public AcceptHeaderRequestCallback(@Nullable Type responseType) {
  645. this.responseType = responseType;
  646. }
  647.  
  648. public void doWithRequest(ClientHttpRequest request) throws IOException {
  649. if (this.responseType != null) {
  650. List<MediaType> allSupportedMediaTypes = (List)RestTemplate.this.getMessageConverters().stream().filter((converter) -> {
  651. return this.canReadResponse(this.responseType, converter);
  652. }).flatMap(this::getSupportedMediaTypes).distinct().sorted(MediaType.SPECIFICITY_COMPARATOR).collect(Collectors.toList());
  653. if (RestTemplate.this.logger.isDebugEnabled()) {
  654. RestTemplate.this.logger.debug("Accept=" + allSupportedMediaTypes);
  655. }
  656.  
  657. request.getHeaders().setAccept(allSupportedMediaTypes);
  658. }
  659.  
  660. }
  661.  
  662. private boolean canReadResponse(Type responseType, HttpMessageConverter<?> converter) {
  663. Class<?> responseClass = responseType instanceof Class ? (Class)responseType : null;
  664. if (responseClass != null) {
  665. return converter.canRead(responseClass, (MediaType)null);
  666. } else if (converter instanceof GenericHttpMessageConverter) {
  667. GenericHttpMessageConverter<?> genericConverter = (GenericHttpMessageConverter)converter;
  668. return genericConverter.canRead(responseType, (Class)null, (MediaType)null);
  669. } else {
  670. return false;
  671. }
  672. }
  673.  
  674. private Stream<MediaType> getSupportedMediaTypes(HttpMessageConverter<?> messageConverter) {
  675. return messageConverter.getSupportedMediaTypes().stream().map((mediaType) -> {
  676. return mediaType.getCharset() != null ? new MediaType(mediaType.getType(), mediaType.getSubtype()) : mediaType;
  677. });
  678. }
  679. }
  680. }
2、
5.返回顶部
1、
2、
 
6.返回顶部
 
作者:ylbtech
出处:http://ylbtech.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

Java-Class-C:org.springframework.web.client.RestTemplate的更多相关文章

  1. Spring Cloud ZooKeeper集成Feign的坑1,错误:Consider defining a bean of type 'org.springframework.web.client.RestTemplate' in your configuration.

    错误如下: ERROR 31473 --- [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** A ...

  2. Consider defining a bean of type 'org.springframework.web.client.RestTemplate' in your configuration

    https://www.cnblogs.com/EasonJim/p/7546136.html 错误如下: ERROR 31473 --- [ main] o.s.b.d.LoggingFailure ...

  3. org.springframework.web.client.HttpClientErrorException: 400 null

    异常代码: org.springframework.web.client.HttpClientErrorException: 400 null 已解决. 百度了一下400代表无法解析请求. 说明请求是 ...

  4. SSM报错:No converter found for return value of type: class java.util.ArrayList at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverter

    我使用的是SSM框架,是在编写测试RESTFUL接口的时候出现, @RequestMapping(value = "/selectAll", method = RequestMet ...

  5. Java-Class-I:org.springframework.web.mutipart.MutipartFile

    ylbtech-Java-Class-I:org.springframework.web.mutipart.MutipartFile 1.返回顶部   2.返回顶部 1.1. import org.s ...

  6. Spring MVC报异常:org.springframework.web.util.NestedServletException: Request processing failed

    在使用SpringMVC绑定基本类型(如String,Integer等)参数时,应通过@RequestParam注解指定具体的参数名称,否则,当源代码在非debug模式下编译后,运行时会引发Handl ...

  7. 项目maven update 后启动项目出现导常:org.springframework.web.context.ContextLoaderListener

    导常:org.springframework.web.context.ContextLoaderListener 1. 右键单击工程项目 ->点击 properties2. 选择 Deploym ...

  8. Java-API-Package:org.springframework.web.bind.annotation

    ylbtech-Java-API-Package:org.springframework.web.bind.annotation 1.返回顶部 1. @NonNullApi @NonNullField ...

  9. Java-Class-@I:org.springframework.web.bind.annotation.PostMapping

    ylbtech-Java-Class-@I:org.springframework.web.bind.annotation.PostMapping 1.返回顶部   2.返回顶部 1. package ...

随机推荐

  1. java8的正确使用姿势

    ackage com.expgiga.Java8; import java.util.ArrayList; import java.util.Arrays; import java.util.List ...

  2. leetcode 596 BUG笔记

    There is a table courses with columns: student and class Please list out all classes which have more ...

  3. JUC源码分析-集合篇(三)ConcurrentLinkedQueue

    JUC源码分析-集合篇(三)ConcurrentLinkedQueue 在并发编程中,有时候需要使用线程安全的队列.如果要实现一个线程安全的队列有两种方式:一种是使用阻塞算法,另一种是使用非阻塞算法. ...

  4. js导出复杂表头(多级表头)的excel

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. Python的一些列表方法

    1.append:方法append用于将一个对象附加到列表末尾,直接修改列表 lst=[1,2,3,4] lst.append(5) print(lst) 1,2,3,4,5 2.clear:方法cl ...

  6. 47-Ubuntu-系统信息-2-df和du查看磁盘和目录空间占用

    序号 命令 作用 01 df -h disk free 显示磁盘剩余空间;-h以人性化的方式显示文件大小 02 du -h [目录名] disk usage 显示目录下的文件大小 注:显示磁盘信息的时 ...

  7. hdu6315 /// 线段树区间更新

    题目大意: 给定n q 为序列的个数和操作的个数 给定n个数的序列b[]作为分母 初始全为0的序列a[]作为分子 两种操作 add l r 为a[]的l到r区间全部+1 query l r 为查询l到 ...

  8. spring boot jpa 多表关联 @OneToOne @OneToMany @ManyToOne@ManyToMany

    1.一对一关联 @OneToOne import lombok.Data; import javax.persistence.*; /** * @Author: GWL * @Description: ...

  9. 解析TextView中的URL等指定特殊字符串与点击事件

    使用TextView时,有时可能需要给予TextView里的特定字符串,比如URL,数字特别的样式,必希望能够添加点击事件.比如发短信时,文字里的url就可以点击直接打开浏览器,数字可以点击拨打电话. ...

  10. 2018-2-13-win10-uwp-让焦点在点击在页面空白处时回到textbox中

    title author date CreateTime categories win10 uwp 让焦点在点击在页面空白处时回到textbox中 lindexi 2018-2-13 17:23:3 ...