Spring HTTP客户端

我是Spring的新手,我需要我的Java应用程序通过HTTP连接到另一个API(JSON,RESTful)。 Spring Framework是否有类似JSON HTTP Rest Client的东西? Spring开发人员通常使用什么?

我通过以下方式实现了我所需要的:

import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.client.RestTemplate; public class RestClient { private String server = "http://localhost:3000"; private RestTemplate rest; private HttpHeaders headers; private HttpStatus status; public RestClient() { this.rest = new RestTemplate(); this.headers = new HttpHeaders(); headers.add("Content-Type", "application/json"); headers.add("Accept", "*/*"); } public String get(String uri) { HttpEntity requestEntity = new HttpEntity("", headers); ResponseEntity responseEntity = rest.exchange(server + uri, HttpMethod.GET, requestEntity, String.class); this.setStatus(responseEntity.getStatusCode()); return responseEntity.getBody(); } public String post(String uri, String json) { HttpEntity requestEntity = new HttpEntity(json, headers); ResponseEntity responseEntity = rest.exchange(server + uri, HttpMethod.POST, requestEntity, String.class); this.setStatus(responseEntity.getStatusCode()); return responseEntity.getBody(); } public void put(String uri, String json) { HttpEntity requestEntity = new HttpEntity(json, headers); ResponseEntity responseEntity = rest.exchange(server + uri, HttpMethod.PUT, requestEntity, null); this.setStatus(responseEntity.getStatusCode()); } public void delete(String uri) { HttpEntity requestEntity = new HttpEntity("", headers); ResponseEntity responseEntity = rest.exchange(server + uri, HttpMethod.DELETE, requestEntity, null); this.setStatus(responseEntity.getStatusCode()); } public HttpStatus getStatus() { return status; } public void setStatus(HttpStatus status) { this.status = status; } } 

最简单的是使用RestTemplate ,查看官方Spring博客上的这篇文章:

RestTemplate是客户端HTTP访问的中心Spring类。

这是一个GET的例子:

 String result = restTemplate.getForObject("http://example.com/hotels/{hotel}/bookings/{booking}", String.class, "42", "21"); 

我是按照以下方式做到的:

 import java.io.FileReader; import java.util.HashMap; import java.util.Map; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; import org.springframework.http.HttpEntity; import org.springframework.http.ResponseEntity; import org.springframework.http.converter.StringHttpMessageConverter; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; import org.springframework.web.client.RestTemplate; public class PostRequestMain { /** * POST with Headers call using Spring RestTemplate * * * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub MultiValueMap headers = new LinkedMultiValueMap(); Map map = new HashMap(); map.put("Content-Type", "application/json"); headers.setAll(map); Map req_payload = new HashMap(); req_payload.put("name", "piyush"); HttpEntity request = new HttpEntity<>(req_payload, headers); String url = "http://localhost:8080/portal-name/module-name/"; // Create a new RestTemplate instance RestTemplate restTemplate = new RestTemplate(); // Add the String message converter restTemplate.getMessageConverters().add(new StringHttpMessageConverter()); ResponseEntity response = restTemplate.postForEntity(url, request, String.class); System.out.println(response); } private static void getPayloadMap() { JSONParser parser = new JSONParser(); try { Object obj = parser.parse(new FileReader("C:\\Piyush\\test.json")); JSONObject jsonObject = (JSONObject) obj; Map payLoadMap = new HashMap(); payLoadMap.putAll(jsonObject); System.out.println(jsonObject); } catch (Exception e) { } } }