📜  Spring – RestTemplate(1)

📅  最后修改于: 2023-12-03 15:05:16.537000             🧑  作者: Mango

Spring - RestTemplate

Spring - RestTemplate是Spring框架的一个重要组件,它提供了一个简单和方便的方法来调用RESTful Web服务。 它是一个在Java中非常受欢迎的REST客户端库之一。

RestTemplate可以用于访问Restful服务资源,可以处理GET、POST、PUT、DELETE等HTTP方法,可以将HTTP响应转换为某些Java对象(如POJO,JSON等)。

应用场景
  • 远程调用REST服务:RestTemplate是Spring框架的核心部分,它提供了通过HTTP请求访问RESTful服务所需的支持。
  • 资源操作:通过RestTemplate的HTTP方法(GET,POST,PUT,DELETE等)可以修改或删除资源。
  • 客户端缓存:RestTemplate支持http缓存,这有助于提高应用程序性能,减少网络流量和延迟。
  • 与OAuth服务器交互:RestTemplate提供OAuth2RestTemplate,使秘密和保护资源非常方便。
RestTemplate示例

GET请求:

RestTemplate restTemplate = new RestTemplate();
String url = "https://jsonplaceholder.typicode.com/posts/1";
String result = restTemplate.getForObject(url, String.class);
System.out.println(result);

POST请求:

RestTemplate restTemplate = new RestTemplate();
String url = "https://jsonplaceholder.typicode.com/posts";
String requestJson = "{\"userId\":1,\"title\":\"test\",\"body\":\"test\"}";
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<String> entity = new HttpEntity<>(requestJson, headers);
String result = restTemplate.postForObject(url, entity, String.class);
System.out.println(result);

将HTTP响应转换为Java对象:

class Post {
    private Integer userId;
    private Integer id;
    private String title;
    private String body;

    //getter and setter
}

RestTemplate restTemplate = new RestTemplate();
String url = "https://jsonplaceholder.typicode.com/posts/1";
Post post = restTemplate.getForObject(url, Post.class);
System.out.println(post.getTitle());
配置RestTemplate

在大多数情况下,RestTemplate的默认配置就足够了,但是你也可以进行一些定制。例如,有时必须配置连接和读取超时,设置连接重试和代理等。

自定义HttpClient

CloseableHttpClient httpClient = HttpClients.custom()
        .setConnectionManager(new PoolingHttpClientConnectionManager())
        .setDefaultRequestConfig(RequestConfig.custom()
                .setConnectTimeout(3000).setSocketTimeout(5000).build())
        .build();
HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory();
requestFactory.setHttpClient(httpClient);
RestTemplate restTemplate = new RestTemplate(requestFactory);

添加拦截器

RestTemplate restTemplate = new RestTemplate();
ClientHttpRequestInterceptor interceptor = (request, body, execution) -> {
    System.out.println("Intercepting request: " + request.getURI());
    ClientHttpResponse response = execution.execute(request, body);
    System.out.println("Intercepting response: " + response.getStatusCode());
    return response;
};
restTemplate.setInterceptors(Collections.singletonList(interceptor));
结论

Spring - RestTemplate是一个非常强大的工具,可以使HTTP客户端与RESTful Web服务交互地变得非常容易和简单。 它提供各种方法和功能,可以满足许多开发场景的需求。该库集成到Spring Framework中,因此可以与Spring应用程序无缝集成。