天天看点

springboot RestTemplate

1. RestTemplateConfig.java

@Configuration

public class RestTemplateConfig{

    @Bean

    public RestTemplate restTemplate(ClientHttpRequestFactory factory){

        return new RestTemplate(factory);

    }

    @Bean

    public ClientHttpRequestFactory simpleClientHttpRequestFactory(){

        SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();

        factory.setReadTimeout(5000);//ms

        factory.setConnectTimeout(15000);//ms

        return factory;

    }

}

2. controller 层代码 或application 代码中

@Autowired

    RestTemplate restTemplate;

(1)发送GET请求(getForObject()、getForEntity()、exchange()) 

// 1-getForObject()  

User user1 = this.restTemplate.getForObject(uri, User.class);  

// 2-getForEntity()  

ResponseEntity<User> responseEntity1 = this.restTemplate.getForEntity(uri, User.class);  

HttpStatus statusCode = responseEntity1.getStatusCode();  

HttpHeaders header = responseEntity1.getHeaders();  

User user2 = responseEntity1.getBody();  

// 3-exchange()  

RequestEntity requestEntity = RequestEntity.get(new URI(uri)).build();  

ResponseEntity<User> responseEntity2 = this.restTemplate.exchange(requestEntity, User.class);  

User user3 = responseEntity2.getBody();  

(2)发送POST请求(postForObject()、postForEntity()、exchange()) 

// 1-postForObject()  

User user1 = this.restTemplate.postForObject(uri, user, User.class);  

// 2-postForEntity()  

ResponseEntity<User> responseEntity1 = this.restTemplate.postForEntity(uri, user, User.class);  

// 3-exchange()  

RequestEntity<User> requestEntity = RequestEntity.post(new URI(uri)).body(user);  

ResponseEntity<User> responseEntity2 = this.restTemplate.exchange(requestEntity, User.class);  

(3)设置HTTP Header信息 

// 1-Content-Type  

RequestEntity<User> requestEntity = RequestEntity  

        .post(new URI(uri))  

        .contentType(MediaType.APPLICATION_JSON)  

        .body(user);  

// 2-Accept  

RequestEntity<User> requestEntity = RequestEntity  

        .post(new URI(uri))  

        .accept(MediaType.APPLICATION_JSON)  

        .body(user);  

// 3-Other  

RequestEntity<User> requestEntity = RequestEntity  

        .post(new URI(uri))  

        .header("Authorization", "Basic " + base64Credentials)  

        .body(user);  

(6)设置连接池 

@Configuration  

public class RestClientConfig {  

  @Bean  

  public ClientHttpRequestFactory httpRequestFactory() {  

    return new HttpComponentsClientHttpRequestFactory(httpClient());  

  }  

  @Bean  

  public RestTemplate restTemplate() {  

    return new RestTemplate(httpRequestFactory());  

  }  

  @Bean  

  public HttpClient httpClient() {  

    Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory> create()  

        .register("http", PlainConnectionSocketFactory.getSocketFactory())  

        .register("https", SSLConnectionSocketFactory.getSocketFactory())  

        .build();  

    PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(registry);  

    connectionManager.setMaxTotal(5);  

    connectionManager.setDefaultMaxPerRoute(5);  

    RequestConfig requestConfig = RequestConfig.custom()  

        .setSocketTimeout(8000)  

        .setConnectTimeout(8000)  

        .setConnectionRequestTimeout(8000)  

        .build();  

    return HttpClientBuilder.create()  

        .setDefaultRequestConfig(requestConfig)  

        .setConnectionManager(connectionManager)  

        .build();  

  }  

}  

(7)发送文件 

MultiValueMap<String, Object> multiPartBody = new LinkedMultiValueMap<>();  

multiPartBody.add("file", new ClassPathResource("/tmp/user.txt"));  

RequestEntity<MultiValueMap<String, Object>> requestEntity = RequestEntity  

        .post(uri)  

        .contentType(MediaType.MULTIPART_FORM_DATA)  

        .body(multiPartBody);  

(8)下载文件 

// 小文件  

RequestEntity requestEntity = RequestEntity.get(uri).build();  

ResponseEntity<byte[]> responseEntity = restTemplate.exchange(requestEntity, byte[].class);  

byte[] downloadContent = responseEntity.getBody();  

// 大文件  

ResponseExtractor<ResponseEntity<File>> responseExtractor = new ResponseExtractor<ResponseEntity<File>>() {  

    @Override  

    public ResponseEntity<File> extractData(ClientHttpResponse response) throws IOException {  

        File rcvFile = File.createTempFile("rcvFile", "zip");  

        FileCopyUtils.copy(response.getBody(), new FileOutputStream(rcvFile));  

        return ResponseEntity.status(response.getStatusCode()).headers(response.getHeaders()).body(rcvFile);  

    }  

};  

File getFile = this.restTemplate.execute(targetUri, HttpMethod.GET, null, responseExtractor);  

继续阅读