三种方法实现调用Restful接口

简介:

1.基本介绍

  Restful接口的调用,前端一般使用ajax调用,后端可以使用的方法比较多,

  本次介绍三种:

    1.HttpURLConnection实现

    2.HttpClient实现

    3.Spring的RestTemplate

 

2.HttpURLConnection实现

复制代码
复制代码
 1 @Controller
 2 public class RestfulAction {
 3     
 4     @Autowired
 5     private UserService userService;
 6 
 7     // 修改
 8     @RequestMapping(value = "put/{param}", method = RequestMethod.PUT)
 9     public @ResponseBody String put(@PathVariable String param) {
10         return "put:" + param;
11     }
12 
13     // 新增
14     @RequestMapping(value = "post/{param}", method = RequestMethod.POST)
15     public @ResponseBody String post(@PathVariable String param,String id,String name) {
16         System.out.println("id:"+id);
17         System.out.println("name:"+name);
18         return "post:" + param;
19     }
20     
21 
22     // 删除
23     @RequestMapping(value = "delete/{param}", method = RequestMethod.DELETE)
24     public @ResponseBody String delete(@PathVariable String param) {
25         return "delete:" + param;
26     }
27 
28     // 查找
29     @RequestMapping(value = "get/{param}", method = RequestMethod.GET)
30     public @ResponseBody String get(@PathVariable String param) {
31         return "get:" + param;
32     }
33     
34     
35     // HttpURLConnection 方式调用Restful接口
36     // 调用接口
37     @RequestMapping(value = "dealCon/{param}")
38     public @ResponseBody String dealCon(@PathVariable String param) {
39         try {
40             String url = "http://localhost:8080/tao-manager-web/";
41             url+=(param+"/xxx");
42             URL restServiceURL = new URL(url);
43             HttpURLConnection httpConnection = (HttpURLConnection) restServiceURL
44                     .openConnection();
45             //param 输入小写,转换成 GET POST DELETE PUT 
46             httpConnection.setRequestMethod(param.toUpperCase());
47 //            httpConnection.setRequestProperty("Accept", "application/json");
48             if("post".equals(param)){
49                 //打开输出开关
50                 httpConnection.setDoOutput(true);
51 //                httpConnection.setDoInput(true);
52                 
53                 //传递参数
54                 String input = "&id="+ URLEncoder.encode("abc", "UTF-8");
55                 input+="&name="+ URLEncoder.encode("啊啊啊", "UTF-8");
56                 OutputStream outputStream = httpConnection.getOutputStream();
57                 outputStream.write(input.getBytes());
58                 outputStream.flush();
59             }
60             if (httpConnection.getResponseCode() != 200) {
61                 throw new RuntimeException(
62                         "HTTP GET Request Failed with Error code : "
63                                 + httpConnection.getResponseCode());
64             }
65             BufferedReader responseBuffer = new BufferedReader(
66                     new InputStreamReader((httpConnection.getInputStream())));
67             String output;
68             System.out.println("Output from Server:  \n");
69             while ((output = responseBuffer.readLine()) != null) {
70                 System.out.println(output);
71             }
72             httpConnection.disconnect();
73         } catch (MalformedURLException e) {
74             e.printStackTrace();
75         } catch (IOException e) {
76             e.printStackTrace();
77         }
78         return "success";
79     }
80 
81 }
复制代码
复制代码

 

 

 

3.HttpClient实现

复制代码
复制代码
  1 package com.taozhiye.controller;
  2 
  3 import org.apache.http.HttpEntity;
  4 import org.apache.http.HttpResponse;
  5 import org.apache.http.NameValuePair;
  6 import org.apache.http.client.HttpClient;
  7 import org.apache.http.client.entity.UrlEncodedFormEntity;
  8 import org.apache.http.client.methods.HttpDelete;
  9 import org.apache.http.client.methods.HttpGet;
 10 import org.apache.http.client.methods.HttpPost;
 11 import org.apache.http.client.methods.HttpPut;
 12 import org.apache.http.impl.client.HttpClients;
 13 import org.apache.http.message.BasicNameValuePair;
 14 import org.springframework.beans.factory.annotation.Autowired;
 15 import org.springframework.stereotype.Controller;
 16 import org.springframework.web.bind.annotation.PathVariable;
 17 import org.springframework.web.bind.annotation.RequestMapping;
 18 import org.springframework.web.bind.annotation.RequestMethod;
 19 import org.springframework.web.bind.annotation.ResponseBody;
 20 
 21 import com.fasterxml.jackson.databind.ObjectMapper;
 22 import com.taozhiye.entity.User;
 23 import com.taozhiye.service.UserService;
 24 
 25 import java.io.BufferedReader;
 26 import java.io.IOException;
 27 import java.io.InputStreamReader;
 28 import java.io.OutputStream;
 29 import java.net.HttpURLConnection;
 30 import java.net.MalformedURLException;
 31 import java.net.URL;
 32 import java.net.URLEncoder;
 33 import java.util.ArrayList;
 34 import java.util.List;
 35 
 36 @Controller
 37 public class RestfulAction {
 38     
 39     @Autowired
 40     private UserService userService;
 41 
 42     // 修改
 43     @RequestMapping(value = "put/{param}", method = RequestMethod.PUT)
 44     public @ResponseBody String put(@PathVariable String param) {
 45         return "put:" + param;
 46     }
 47 
 48     // 新增
 49     @RequestMapping(value = "post/{param}", method = RequestMethod.POST)
 50     public @ResponseBody User post(@PathVariable String param,String id,String name) {
 51         User u = new User();
 52         System.out.println(id);
 53         System.out.println(name);
 54         u.setName(id);
 55         u.setPassword(name);
 56         u.setEmail(id);
 57         u.setUsername(name);
 58         return u;
 59     }
 60     
 61 
 62     // 删除
 63     @RequestMapping(value = "delete/{param}", method = RequestMethod.DELETE)
 64     public @ResponseBody String delete(@PathVariable String param) {
 65         return "delete:" + param;
 66     }
 67 
 68     // 查找
 69     @RequestMapping(value = "get/{param}", method = RequestMethod.GET)
 70     public @ResponseBody User get(@PathVariable String param) {
 71         User u = new User();
 72         u.setName(param);
 73         u.setPassword(param);
 74         u.setEmail(param);
 75         u.setUsername("爱爱啊");
 76         return u;
 77     }
 78 
 79     
 80     
 81     @RequestMapping(value = "dealCon2/{param}")
 82     public @ResponseBody User dealCon2(@PathVariable String param) {
 83         User user = null;
 84         try {
 85             HttpClient client = HttpClients.createDefault();
 86             if("get".equals(param)){
 87                 HttpGet request = new HttpGet("http://localhost:8080/tao-manager-web/get/"
 88                         +"啊啊啊");
 89                 request.setHeader("Accept", "application/json");
 90                 HttpResponse response = client.execute(request);
 91                 HttpEntity entity = response.getEntity();
 92                 ObjectMapper mapper = new ObjectMapper();
 93                 user = mapper.readValue(entity.getContent(), User.class);
 94             }else if("post".equals(param)){
 95                 HttpPost request2 = new HttpPost("http://localhost:8080/tao-manager-web/post/xxx");
 96                 List<NameValuePair> nvps = new ArrayList<NameValuePair>();  
 97                 nvps.add(new BasicNameValuePair("id", "啊啊啊"));  
 98                 nvps.add(new BasicNameValuePair("name", "secret"));
 99                 UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(nvps, "GBK");
100                 request2.setEntity(formEntity);
101                 HttpResponse response2 = client.execute(request2);
102                 HttpEntity entity = response2.getEntity();
103                 ObjectMapper mapper = new ObjectMapper();
104                 user = mapper.readValue(entity.getContent(), User.class);
105             }else if("delete".equals(param)){
106                 
107             }else if("put".equals(param)){
108                 
109             }
110         } catch (Exception e) {
111             e.printStackTrace();
112         }
113         return user;
114     }
115     
116     
117 }
复制代码
复制代码

 

4.Spring的RestTemplate

springmvc.xml增加

复制代码
复制代码
 1     <!-- 配置RestTemplate -->
 2     <!--Http client Factory -->
 3     <bean id="httpClientFactory"
 4         class="org.springframework.http.client.SimpleClientHttpRequestFactory">
 5         <property name="connectTimeout" value="10000" />
 6         <property name="readTimeout" value="10000" />
 7     </bean>
 8 
 9     <!--RestTemplate -->
10     <bean id="restTemplate" class="org.springframework.web.client.RestTemplate">
11         <constructor-arg ref="httpClientFactory" />
12     </bean>
复制代码
复制代码

controller

复制代码
复制代码
 1 @Controller
 2 public class RestTemplateAction {
 3 
 4     @Autowired
 5     private RestTemplate template;
 6 
 7     @RequestMapping("RestTem")
 8     public @ResponseBody User RestTem(String method) {
 9         User user = null;
10         //查找
11         if ("get".equals(method)) {
12             user = template.getForObject(
13                     "http://localhost:8080/tao-manager-web/get/{id}",
14                     User.class, "呜呜呜呜");
15             
16             //getForEntity与getForObject的区别是可以获取返回值和状态、头等信息
17             ResponseEntity<User> re = template.
18                     getForEntity("http://localhost:8080/tao-manager-web/get/{id}",
19                     User.class, "呜呜呜呜");
20             System.out.println(re.getStatusCode());
21             System.out.println(re.getBody().getUsername());
22             
23         //新增
24         } else if ("post".equals(method)) {
25             HttpHeaders headers = new HttpHeaders();
26             headers.add("X-Auth-Token", UUID.randomUUID().toString());
27             MultiValueMap<String, String> postParameters = new LinkedMultiValueMap<String, String>();
28             postParameters.add("id", "啊啊啊");
29             postParameters.add("name", "部版本");
30             HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<MultiValueMap<String, String>>(
31                     postParameters, headers);
32             user = template.postForObject(
33                     "http://localhost:8080/tao-manager-web/post/aaa", requestEntity,
34                     User.class);
35         //删除
36         } else if ("delete".equals(method)) {
37             template.delete("http://localhost:8080/tao-manager-web/delete/{id}","aaa");
38         //修改
39         } else if ("put".equals(method)) {
40             template.put("http://localhost:8080/tao-manager-web/put/{id}",null,"bbb");
41         }
42         return user;
43 
44     }
45 }
复制代码
复制代码

 

目录
相关文章
|
5月前
|
XML JSON 数据格式
flea-jersey使用之Flea RESTful接口客户端接入
本篇介绍 Flea框架下的 flea-jersey-client模块,并提供客户端依赖管理及接入步骤
54 1
flea-jersey使用之Flea RESTful接口客户端接入
|
5月前
|
API 网络架构 开发框架
flea-jersey使用之Flea RESTful接口服务端接入
本篇介绍 Flea框架下的 flea-jersey-server模块,并提供服务端依赖管理及接入步骤
61 1
flea-jersey使用之Flea RESTful接口服务端接入
|
4月前
|
XML 物联网 API
服务端和客户端 RESTful 接口上传 Excel 的 Python 代码
本文作者木头左是物联网工程师,分享如何使用 Python 和 Flask-RESTful 构建一个简单的 RESTful API,实现文件上传功能,特别支持Excel文件。通过安装Flask和Flask-RESTful库,创建Flask应用,实现文件上传接口,并将其添加到API。该方法具有简单易用、灵活、可扩展及社区支持等优点。
服务端和客户端 RESTful 接口上传 Excel 的 Python 代码
|
10天前
|
安全 API 开发者
Web 开发新风尚!Python RESTful API 设计与实现,让你的接口更懂开发者心!
在当前的Web开发中,Python因能构建高效简洁的RESTful API而备受青睐,大大提升了开发效率和用户体验。本文将介绍RESTful API的基本原则及其在Python中的实现方法。以Flask为例,演示了如何通过不同的HTTP方法(如GET、POST、PUT、DELETE)来创建、读取、更新和删除用户信息。此示例还包括了基本的路由设置及操作,为开发者提供了清晰的API交互指南。
44 6
|
2月前
|
XML JSON API
RESTful API设计最佳实践:构建高效、可扩展的接口
【8月更文挑战第17天】RESTful API设计是一个涉及多方面因素的复杂过程。通过遵循上述最佳实践,开发者可以构建出更加高效、可扩展、易于维护的API。然而,值得注意的是,最佳实践并非一成不变,随着技术的发展和业务需求的变化,可能需要不断调整和优化API设计。因此,保持对新技术和最佳实践的关注,是成为一名优秀API设计师的关键。
|
3月前
|
API 数据安全/隐私保护 开发者
Web 开发新风尚!Python RESTful API 设计与实现,让你的接口更懂开发者心!
【7月更文挑战第23天】Python的RESTful API设计在Web开发中流行,提升效率与体验。REST强调HTTP方法(GET, POST, PUT, DELETE)操作资源。使用Flask框架可快速实现API,如管理用户信息。示例代码展示如何创建、读取、更新和删除用户,通过不同HTTP方法和URL路径。实际应用中,增加验证、错误处理和权限控制可增强API的安全性和稳定性。安装Flask后,可运行代码测试API功能。
61 6
|
3月前
|
安全 API 网络架构
Python RESTful API设计新篇章,打造高效、易用、安全的Web服务接口,你准备好了吗?
【7月更文挑战第22天】在数字化转型中,RESTful API借助Python的Flask和Django REST Framework,提供高效、易用和安全的接口设计。Flask示例展示了简洁的CRUD操作,Swagger等工具增进API文档的易用性,而HTTPS、JWT和输入验证确保安全性。Python RESTful API设计涉及效率、可用性和安全,是不断进化的Web服务接口的关键。准备好踏上这一新篇章了吗?一起探索,创造卓越!
47 2
|
4月前
|
存储 前端开发 安全
Nuxt3 实战 (十):使用 Supabase 实现 RESTful 风格 API 接口
这篇文章介绍了如何使用Supabase实现RESTful风格的API接口,用于网站分类和子站点的增删改查(CURD)功能。文章首先阐述了表设计,包括ds_categorys和ds_websites两张表的列名、类型和用途,并提到了为每张表添加的user_id和email字段以支持用户身份识别。接着,文章描述了接口设计,以ds_websites表为例,说明了如何通过RESTful API实现CURD功能,并给出了使用SupabaseClient实现插入数据的相关代码。文章最后提供了项目效果预览和总结,指出学习了Nuxt3创建接口及调用Supabase数据库操作。
Nuxt3 实战 (十):使用 Supabase 实现 RESTful 风格 API 接口
|
4月前
|
XML 安全 API
API攻防-接口安全&SOAP&OpenAPI&RESTful&分类特征导入&项目联动检测
API攻防-接口安全&SOAP&OpenAPI&RESTful&分类特征导入&项目联动检测
|
4月前
|
SQL 缓存 测试技术
RESTful API设计的最佳实践:构建高效、可维护的Web服务接口
【6月更文挑战第11天】构建高效、可维护的RESTful API涉及多个最佳实践:遵循客户端-服务器架构、无状态性等REST原则;设计时考虑URL结构(动词+宾语,使用标准HTTP方法)、使用HTTP状态码、统一响应格式及错误处理;确保数据安全(HTTPS、认证授权、输入验证);实施版本控制;并提供详细文档和测试用例。这些实践能提升Web服务接口的性能和质量。