一、利用RestTemplate來實現
RestTemplate是spring-web封裝的一個請求類,基本可以滿足一般業務需求。
private static RestTemplate restTemplate = new RestTemplate();public static final HttpHeaders jsonAndXml; static { jsonAndXml = new HttpHeaders(); jsonAndXml.setContentType(MediaType.APPLICATION_JSON_UTF8); List<MediaType> mediaTypeList = new ArrayList<MediaType>(); mediaTypeList.add(MediaType.APPLICATION_XML); jsonAndXml.setAccept(mediaTypeList); }>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>String response = restTemplate.exchange(url, HttpMethod.GET, new HttpEntity<>(jsonAndXml), String.class).getBody();
除了exchange外,RestTemplate有許多可供開發人員調用的介面,如傳路徑變數,參數等。
二、利用apache httpcomponents組件實現
1.導包
<dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.1</version></dependency>
2.實現
HttpEntity body = new StringEntity(new Gson().toJson(root), ContentType.create("application/json", Consts.UTF_8));DefaultBHttpClientConnection conn = null; try { HttpProcessor httpProcessor = HttpProcessorBuilder.create().add(new RequestContent()).add(new RequestTargetHost()).add(new RequestConnControl()) .add(new RequestUserAgent("Test/1.1")).add(new RequestExpectContinue(true)).build(); HttpRequestExecutor httpRequestExecutor = new HttpRequestExecutor(); HttpCoreContext coreContext = new HttpCoreContext(); HttpHost host = new HttpHost(HOST, PORT); coreContext.setTargetHost(host); conn = new DefaultBHttpClientConnection(8 * 1024); ConnectionReuseStrategy connectionReuseStrategy = DefaultConnectionReuseStrategy.INSTANCE; if (!conn.isOpen()) { Socket socket = new Socket(host.getHostName(), host.getPort()); conn.bind(socket); } BasicHttpEntityEnclosingRequest request = new BasicHttpEntityEnclosingRequest("POST", url); request.setEntity(body); System.out.println("URL:" + request.getRequestLine().getUri()); httpRequestExecutor.preProcess(request, httpProcessor, coreContext); HttpResponse response = httpRequestExecutor.execute(request, conn, coreContext); httpRequestExecutor.postProcess(response, httpProcessor, coreContext); System.out.println("響應:" + response.getStatusLine()); System.out.println("響應的body" + EntityUtils.toString(response.getEntity())); System.out.println("====結束===="); if (!connectionReuseStrategy.keepAlive(response, coreContext)) conn.close(); else System.out.println("保持連結"); } catch (Exception e) { e.printStackTrace(); } finally { try { conn.close(); } catch (IOException e) { e.printStackTrace(); } }