package com.common.restTemplate; import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import org.springframework.web.client.RestTemplate; /** * 封裝RestTemplate 請求方式service */ @Service("RestTemplateService") public class RestTemplateService { @Autowired private RestTemplate restTemplate; //url(get請求 可拼接路徑參數) public String getForObject(String url){ String message = restTemplate.getForObject(url, String.class); return message; } //map傳參 請求方式get public String getForObject(String url,Map params){ String message= restTemplate.getForObject(url, String.class, params); return message; } /*map , token傳參 請求方式get *1 請求的url,其中{}為參數占位符,分別對應請求參數map中的key. *2請求方法. *3請求實體,可以封裝請求體和請求頭. *4返回體轉換的類型,這里返回json,將其指定為Map. *5請求參數map. * */ @SuppressWarnings("rawtypes") public ResponseEntity<Map> getByHeaderMap(String url,String token,Map params){ HttpHeaders headers = new HttpHeaders(); headers.add("Authorization", token); @SuppressWarnings({ "unchecked" }) ResponseEntity<Map> response = restTemplate.exchange( url, HttpMethod.GET, new HttpEntity<String>(headers), Map.class, params); return response; } //url(post請求 可拼接路徑參數) public String postForObject(String url){ ResponseEntity<String> message = restTemplate.postForEntity(url, null, String.class); return message.getBody(); } //url(請求路徑) entityJson(傳遞參數json串) post傳參 此請求方式可用於列表條件查詢 添加修改方法(多參數傳值) public String postForObject(String url,String entityJson){ HttpHeaders headers = new HttpHeaders(); MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8"); headers.setContentType(type); headers.add("Accept", MediaType.APPLICATION_JSON.toString()); HttpEntity<String> formEntity = new HttpEntity<String>(entityJson, headers); String result=restTemplate.postForObject(url,formEntity,String.class); return result; } public String postForObject(String url,HttpServletRequest request,String entityJson){ HttpHeaders headers = new HttpHeaders(); MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8"); headers.setContentType(type); headers.add("Accept", MediaType.APPLICATION_JSON.toString()); headers.add("token", request.getHeader("token")); headers.add("uid", request.getHeader("uid")); headers.add("userid", request.getHeader("userid")); HttpEntity<String> formEntity = new HttpEntity<String>(entityJson, headers); String result=restTemplate.postForObject(url,formEntity,String.class); return result; } //url(請求路徑+路徑傳參) public void delete(String url){ restTemplate.delete(url); } }
接口配置
package com.common.restTemplate; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.client.ClientHttpRequestFactory; import org.springframework.http.client.SimpleClientHttpRequestFactory; import org.springframework.web.client.RestTemplate; /** * RestTemplate配置類 */ @Configuration public class RestTemplateConfig { //最好是用不注釋的方法,在注入的同時設置連接時間,這種注釋的也可以,但是沒有設置超時時間 /*@Bean public RestTemplate restTemplate(RestTemplateBuilder builder){ return builder.build(); }*/ @Bean public RestTemplate restTemplate(ClientHttpRequestFactory factory){ return new RestTemplate(factory); } @Bean public ClientHttpRequestFactory simpleClientHttpRequestFactory(){ SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory(); factory.setReadTimeout(50000);//單位為ms factory.setConnectTimeout(50000);//單位為ms return factory; } }