前端一般通过Ajax来调用,后端调用的方式还是挺多的,比如HttpURLConnection,HttpClient,Spring的RestTemplate
服务端代码如下:
服务端接口请求的URL:http://localhost:8080/rest/user/getUser/xiaoming/18,设定请求方式为GET
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(); } }
客户端的三种请求方式如下:
注:以下demo都是以GET请求为例
1.HttpURLConnection(首先需要引入httpclient包)
<dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.6</version> </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(); } }
测试结果
2.HttpClient(首先需要引入httpclient包,POM同上)
测试代码
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); } }
测试结果
3.RestTemplate(首先需要引入spring-webmvc包)
<!-- https://mvnrepository.com/artifact/org.springframework/spring-web --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.1.3.RELEASE</version> </dependency>
测试代码
第一步:配置web.xml
<web-app> <display-name>Archetype Created Web Application</display-name> <servlet> <servlet-name>restful-client</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>spring.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>restful-client</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
第二步:配置Spring注解扫描
<?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/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <!-- 启用注解 --> <context:component-scan base-package="com.demo.restful.controller"/> </beans>
第三步:编写controller
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 */ @Controller public 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; } }
浏览器运行结果