本文将详细介绍如何使用 SpringBoot 调用 HTTP 接口,并给出详细的代码示例。
一、创建SpringBoot项目
首先,我们需要创建一个SpringBoot项目。可以使用Spring Initializr快速创建,也可以手动创建。
参考代码示例:
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.60</version> </dependency> </dependencies>
二、调用HTTP接口
1、使用RestTemplate
Spring提供了一个方便的访问REST服务的模板类RestTemplate。
参考代码示例:
RestTemplate restTemplate = new RestTemplate(); String result = restTemplate.getForObject(url, String.class); System.out.println(result);
2、使用HttpURLConnection
除了Spring的RestTemplate外,我们也可以使用标准Java库中的 HttpURLConnection 来发送 HTTP 请求。
参考代码示例:
URL url = new URL("http://www.example.com"); HttpURLConnection con = (HttpURLConnection) url.openConnection(); con.setRequestMethod("GET"); BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream())); String inputLine; StringBuffer response = new StringBuffer(); while ((inputLine = in.readLine()) != null) { response.append(inputLine); } in.close(); System.out.println(response.toString());
3、使用Apache HttpClient
另外一个流行的 Java HttpClient 实现是 Apache HttpClient。
参考代码示例:
CloseableHttpClient httpClient = HttpClients.createDefault(); HttpGet httpGet = new HttpGet("http://www.example.com"); CloseableHttpResponse httpResponse = httpClient.execute(httpGet); HttpEntity responseEntity = httpResponse.getEntity(); String response = EntityUtils.toString(responseEntity); System.out.println(response);
三、设置请求参数
1、GET请求设置参数
在使用GET请求时,可直接在URL后拼接参数。
参考代码示例:
String url = "http://www.example.com?id=1"; RestTemplate restTemplate = new RestTemplate(); String result = restTemplate.getForObject(url, String.class); System.out.println(result);
2、POST请求设置参数
在使用 POST 请求时,需要将参数封装为一个对象,并通过 HttpEntity 传递给 POST 方法。
参考代码示例:
JSONObject requestBody = new JSONObject(); requestBody.put("id", 1); requestBody.put("name", "example"); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); HttpEntityrequestEntity = new HttpEntity<>(requestBody.toJSONString(), headers); RestTemplate restTemplate = new RestTemplate(); String result = restTemplate.postForObject(url, requestEntity, String.class); System.out.println(result);
四、处理响应结果
1、处理JSON格式的响应结果
对于 JSON 格式的响应结果,我们需要将其转换为 Java 对象。可以使用第三方库 fastjson 来实现。
参考代码示例:
RestTemplate restTemplate = new RestTemplate(); String result = restTemplate.getForObject(url, String.class); JSONObject jsonObject = JSON.parseObject(result); String name = jsonObject.getString("name"); System.out.println(name);
2、处理XML格式的响应结果
对于 XML 格式的响应结果,我们可以使用 JAXB(Java API for XML Binding)来将其解析成 Java 对象。
参考代码示例:
RestTemplate restTemplate = new RestTemplate(); String result = restTemplate.getForObject(url, String.class); JAXBContext jaxbContext = JAXBContext.newInstance(User.class); Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); User user = (User) jaxbUnmarshaller.unmarshal(new StringReader(result)); System.out.println(user.getName());
五、异常处理
在调用 HTTP 接口时,可能会遇到各种各样的异常情况,比如网络连接异常、HTTP 响应状态码异常等。
参考代码示例:
try { RestTemplate restTemplate = new RestTemplate(); String result = restTemplate.getForObject(url, String.class); JSONObject jsonObject = JSON.parseObject(result); String name = jsonObject.getString("name"); System.out.println(name); } catch (HttpStatusCodeException e) { System.out.println("HTTP状态码异常:" + e.getStatusCode()); } catch (RestClientException e) { System.out.println("网络连接异常:" + e.getMessage()); }
六、总结
本文主要介绍了如何使用 SpringBoot 调用 HTTP 接口,包括使用 RestTemplate、HttpURLConnection 和 Apache HttpClient 发送请求,以及如何设置请求参数、处理响应结果和异常处理。