以前曾经分享过JAVA远程服务调用篇相关内容,今天给这个系列再补一篇文章,就是restful接口的调用。是后端调用哈,前端的话一般是ajax调用后台接口。本次介绍三种方式:
1.HttpURLConnection实现
2.HttpClient实现
3.Spring的RestTemplate
一、构造服务端
package com.demo.restful.service.impl; import com.demo.restful.model.User;import com.demo.restful.service.UserService;import javax.ws.rs.GET;import javax.ws.rs.Path;import javax.ws.rs.PathParam;import javax.ws.rs.Produces;import javax.ws.rs.core.MediaType; /** * @Author: * @Date: 2019/1/8 11:37 */@Path("user")public class UserServiceImpl implements UserService { @Override @GET @Path("getUser/{name}/{age}") @Produces(MediaType.APPLICATION_JSON) public String getUser(@PathParam("name") String name,@PathParam("age") Integer age) { return new User(name,age).toString(); }}
服务端代码如上,服务端接口地址为:
http://localhost:8080/rest/user/getUser/xiaoming/18,
下面以三种不同的方式来调用该接口演示效果。
二、HttpURLConnection实现
<dependency> <groupId>org.apache.httpcomponentsgroupId> <artifactId>httpclientartifactId> <version>4.5.6version>dependency>
package com.demo.restful; import java.io.BufferedReader;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.URL; /** * @Author: * @Date: 2019/1/9 11:12 */public class HttpUrlConnectionTest { public static void main(String[] args) throws Exception { String url = "http://localhost:8080/rest/user/getUser/xiaoming/18"; URL serverUrl = new URL(url); HttpURLConnection connection = (HttpURLConnection) serverUrl.openConnection(); connection.setRequestMethod("GET"); if (connection.getResponseCode() != 200) { throw new RuntimeException( "HTTP GET Request Failed with Error code : " + connection.getResponseCode()); } BufferedReader responseBuffer = new BufferedReader( new InputStreamReader((connection.getInputStream()))); String output; System.out.println("Output from Server: \n"); while ((output = responseBuffer.readLine()) != null) { System.out.println(output); } connection.disconnect(); }}
HttpURLConnection方式调用结果如下图:
二、HttpClient实现
<dependency> <groupId>org.apache.httpcomponentsgroupId> <artifactId>httpclientartifactId> <version>4.5.6version>dependency>
package com.demo.restful; import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;import org.apache.http.client.HttpClient;import org.apache.http.client.methods.HttpGet;import org.apache.http.impl.client.HttpClients;import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.stream.Collectors; /** * @Author: * @Date: 2019/1/9 11:42 */public class HttpClientTest { public static void main(String[] args) throws Exception { HttpClient httpClient = HttpClients.createDefault(); HttpGet httpGet = new HttpGet("http://localhost:8080/rest/user/getUser/xiaoming/18"); HttpResponse execute = httpClient.execute(httpGet); HttpEntity entity = execute.getEntity(); System.out.println(entity); String result = new BufferedReader(new InputStreamReader(entity.getContent())) .lines().collect(Collectors.joining("\n")); System.out.println(result); }}
HttpClient调用结果如下图所示:
三、Spring的RestTemplate实现
<dependency> <groupId>org.springframeworkgroupId> <artifactId>spring-webmvcartifactId> <version>5.1.3.RELEASEversion>dependency>
<web-app> <display-name>Archetype Created Web Applicationdisplay-name> <servlet> <servlet-name>restful-clientservlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class> <init-param> <param-name>contextConfigLocationparam-name> <param-value>spring.xmlparam-value> init-param> servlet> <servlet-mapping> <servlet-name>restful-clientservlet-name> <url-pattern>/url-pattern> servlet-mapping>web-app>
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-3.0.xsd"><context:component-scan base-package="com.demo.restful.controller"/>beans>
package com.demo.restful.controller; import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.annotation.Bean;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.*;import org.springframework.web.client.RestTemplate; /** * @Author: * @Date: 2019/1/9 14:56 */@Controllerpublic class RestTemplateController { @Autowired private RestTemplate restTemplate; //手动将RestTemplate加入Spring容器中 @Bean public RestTemplate restTemplate(){ return new RestTemplate(); } @RequestMapping("/getUser.json") @ResponseBody public String getUser(){ String url = "http://localhost:8080/rest/user/getUser/xiaoming/18"; String forObject = restTemplate.getForObject(url, String.class); return forObject; }}
Spring的RestTemplate 调用结果如下图所示:
感兴趣的读者也可查看下同系列的其他文章:
JAVA远程服务调用篇-RMI和RPC
JAVA远程服务调用篇-Web service服务发布篇
JAVA远程服务调用篇-Web service服务调用篇
JAVA远程服务调用篇-Dubbo调用