本文為博主原創,未經允許不得轉載:
1.對常用調用的方法進行封裝:
import org.springframework.http.HttpHeaders; import com.alibaba.fastjson.JSONObject; public interface SpringRestService { public <T> T postWithJson(String url, JSONObject param, Class<T> responseType); public <T> T postWithJson(String url, HttpHeaders headers, JSONObject param, Class<T> responseType); public <T> T postWithJson(String url, HttpHeaders headers, String param, Class<T> responseType); public <T> T getForObject(String url, Class<T> responseType); public String getForObject(String url, HttpHeaders headers); public String getForXml(String url, HttpHeaders headers); }
2.對上面接口實現封裝:
import org.slf4j.Logger; import org.slf4j.LoggerFactory; 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; import com.alibaba.fastjson.JSONObject; import com.intf.service.springrest.SpringRestService; @Service("springRestService") public class SpringRestServiceImpl implements SpringRestService { @Autowired private RestTemplate restTemplate; private static final Logger LOGGER = LoggerFactory.getLogger(SpringRestServiceImpl.class); @Override public <T> T postWithJson(String url, JSONObject param, Class<T> responseType) { // 設置請求頭 HttpHeaders headers = new HttpHeaders(); // 設置ContentType headers.setContentType(MediaType.APPLICATION_JSON_UTF8); // 請求 return postWithJson(url, headers, param, responseType); } @Override public <T> T postWithJson(String url, HttpHeaders headers, JSONObject param, Class<T> responseType) { // 請求 return postWithJson(url, headers, param.toString(), responseType); } @Override public <T> T postWithJson(String url, HttpHeaders headers, String param, Class<T> responseType) { // 設置ContentType headers.setContentType(MediaType.APPLICATION_JSON_UTF8); // 請求中設置param和headers HttpEntity<String> request = new HttpEntity<>(param, headers); // post請求並返回 return restTemplate.postForObject(url, request, responseType); } @Override public <T> T getForObject(String url, Class<T> responseType) { // get請求並返回 return restTemplate.getForObject(url, responseType); } @Override public String getForObject(String url, HttpHeaders headers) { // 設置ContentType headers.setContentType(MediaType.APPLICATION_JSON_UTF8); // 設置請求頭 HttpEntity<String> requestEntity = new HttpEntity<>(null, headers); // get請求獲取響應內容 ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.GET, requestEntity, String.class); // 返回響應body return response.getBody(); } @Override public String getForXml(String url, HttpHeaders headers) { // 設置ACCEPT headers.add("Accept", MediaType.APPLICATION_XML_VALUE); // 設置ContentType headers.setContentType(MediaType.APPLICATION_XML); // 設置請求頭 HttpEntity<String> requestEntity = new HttpEntity<>(null, headers); // get請求獲取響應內容 ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.GET, requestEntity, String.class); // 返回響應body LOGGER.info(url + "&&&&&" + response.toString() + "&&&&&" + response.getBody()); return response.getBody(); } }