resttemplate的用法

Object… urlVariables 是对url的补充

Class responseType是返回的类型

Object request是实体(MultiValueMap是可以的)或者HttpEntity

  1. getForEntity(String url, Class responseType, Object… urlVariables);

    getForObject(String url, Class responseType, Object… urlVariables);

    1
    2
    ResponseEntity<String> result = getForEntity("http://USER-SERVICE/user?name={1}", String.class, "xiaoming");
    String result = getForObject("http://USER-SERVICE/user?name={1}", String.class, "xiaoming")
  2. getForEntity(String url, Class responseType, Map urlVariables);

    getForObject(String url, Class responseType, Map urlVariables);

    1
    2
    3
    4
    Map<String, String> map = new HashMap<>();
    map.put("name", "xiaoming");
    ResponseEntity<String> result = getForEntity("http://USER-SERVICE/user?name={name}", String.class, map);
    String result = getForObject("http://USER-SERVICE/user?name={name}", String.class, map)
  3. getForEntity(URI url, Class responseType)

    getForObject(URI url, Class responseType)

    1
    2
    3
    UriComponents uriComponents = UriComponentsBuilder.fromUriString("http://USER-SERVICE/user?name={name}").build().expand("xiaoming").encode();
    ResponseEntity<String> result = restTemplate.getForEntity(uriComponents.toUri(), String.class);
    String result = restTemplate.getForObject(uriComponents.toUri(), String.class);
  4. postForEntity(String url, Object request, Class responseType, Object… urlVariables)

    postForObject(String url, Object request, Class responseType, Object… urlVariables)

    1
    Object request 可以是普通对象(MultiValueMap也行),也可以是HttpEntity
  5. postForEntity(String url, Object request, Class responseType, Map urlVariables)

    postForObject(String url, Object request, Class responseType, Map urlVariables)

  6. postForEntity(String url, Object request, Class responseType)

    postForObject(String url, Object request, Class responseType)

  7. ….等等PUT,DELETE都是一样的

SSL访问的RestTemplate

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.3</version>
</dependency>

@Bean
public RestTemplate restTemplate() throws KeyStoreException, NoSuchAlgorithmException, KeyManagementException {
final TrustStrategy acceptingTrustStrategy = (final X509Certificate[] chain, final String authType) -> true;

final SSLContext sslContext = org.apache.http.ssl.SSLContexts.custom()
.loadTrustMaterial(null, acceptingTrustStrategy)
.build();

final SSLConnectionSocketFactory csf = new SSLConnectionSocketFactory(sslContext);

final CloseableHttpClient httpClient = HttpClients.custom()
.setSSLSocketFactory(csf)
.build();

final HttpComponentsClientHttpRequestFactory requestFactory =
new HttpComponentsClientHttpRequestFactory();

requestFactory.setHttpClient(httpClient);
final RestTemplate restTemplate = new RestTemplate(requestFactory);
return restTemplate;
}

设置头访问

1
2
3
4
5
6
// 这个对象有add()方法,可往请求头存入信息
final HttpHeaders headers = new HttpHeaders();
// 解决中文乱码
headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
final HttpEntity<Object> entity = new HttpEntity<Object>(request, headers);
final ResponseEntity<responseClass> responseObject = restTemplate.exchange(url, HttpMethod.POST, entity, responseClass);

参考:https://www.jianshu.com/p/beafe38428c7