实现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 }

原文地址:https://www.cnblogs.com/joke0406/p/8145439.html

时间: 2024-11-08 21:33:09

实现Restful接口的相关文章

RESTful 接口调试分享利器 restc

这个工具来自于https://elemefe.github.io/restc/  这里对Abp进行了一次封装 1.在项目中添加nuget包 Abp.Web.Api.Restc 2.在项目Abp模块的DependsOn添加AbpWebApiRestcModule Run It,启动项目,访问/api开头的restful接口 ,原先正常返回的干巴巴JSON数据变成了一个可以操作分享的UI界面了 项目源码https://github.com/yuzukwok/Abp.Web.Api.Restc大家可以

底层restful接口修改分析

记录接口调用次数,接口调用时间需求. 需要修改公共的类,就是restful接口,可以认为是底层的代码,具体的实现有哪些?插入数据库肯定不能影响性能. 底层restful接口修改分析,布布扣,bubuko.com

前端调用后端的方法(基于restful接口的mvc架构)

1.前端调用后台: 建议用你熟悉的一门服务端程序,例如ASP,PHP,JSP,C#这些都可以,然后把需要的数据从数据库中获得,回传给客户端浏览器(其实一般就是写到HTML中,或者生成XML文件)然后在用JS获得. 2.js只是前端的语言,它还没有访问数据库的能力.不过它可以向某个URL发送请求,并获得返回的数据.这个会用到Ajax技术. 用AJAX,页面不刷新,只提交字符串到后台导入数据库       通过纯AngularJS+REST API构建Web是否可行? 在构建Web系统的时候,可不可

[转]简单识别 RESTful 接口

     本文描述了识别一个接口是否真的是 RESTful 接口的基本方法.符合 REST 架构风格的接口,称为 RESTful 接口.本文不打算从架构风格的推导方面描述,而是从 HTTP 标准的方面描述.识别的方法同时也是指导实践的原则.       一.是否使用了正确(合适)的方法 目前对于 HTTP 标准滥用较多的,就是方法.谈起 RESTful 接口的方法,很多资料告诉大家,说 GET.POST.PUT.DELETE,分别对应数据库操作的 SELECT.INSERT.UPDATE.DEL

Restful接口对操作系统进行操作

在产品开发过程中,有时候需要web端对服务器进行操作,如修改ip.重启设备.关机等.前后端交互有很多方法,常见的有web端直接调用系统命令.通过数据库交互和Restful接口交互.直接调用系统命令最简单,但是最不安全,基本上没人会使用:数据库交互鼻尖安全,但是比较消耗硬件资源.所以Restful交互是一种很好的方式. 下面代码是对Restful形式交互的实现: #-*- coding:utf-8 -*- #!/usr/bin/env python ''' Created on 2017.5.9

RESTful接口签名认证实现机制

RESTful接口 互联网发展至今,催生出了很多丰富多彩的应用,极大地调动了人们对这些应用的使用热情.但同时也为互联网应用带来了严峻的考验.具体体现在以下几个方面: 1.     部署方式的改变:当用户量不多的情况下,可能只需部署一台服务器就可以解决问题,但是当很多用户的情况下,为抗住高并发访问,需要组成应用集群对外提供服务: 2.     应用构建的改变:很多应用采用了多种技术解决方案,不同编程语言(如C,Java,Python),所以很难采用传统应用构建模式将不同模块整合进来: 3.    

简单识别 RESTful 接口

本文描述了识别一个接口是否真的是 RESTful 接口的基本方法.符合 REST 架构风格的接口,称为 RESTful 接口.本文不打算从架构风格的推导方面描述,而是从 HTTP 标准的方面描述.识别的方法同时也是指导实践的原则. 一.是否使用了正确(合适)的方法 目前对于 HTTP 标准滥用较多的,就是方法.谈起 RESTful 接口的方法,很多资料告诉大家,说 GET.POST.PUT.DELETE,分别对应数据库操作的 SELECT.INSERT.UPDATE.DELETE.其实这种理解是

PHP restful 接口

首先我们来认识下RESTful Restful是一种设计风格而不是标准,比如一个接口原本是这样的: http://www.test.com/user/view/id/1 表示获取id为1的用户信息,如果使用Restful风格,可以变成这样: http://www.test.com/user/1 可以很明显的看出这样做的好处: 1.更简洁的URL,对程序员友好 2.不暴露内部代码结构,更安全 那么,如何实现这个接口呢?首先,我们需要接收到/user/1部分. $path = $_SERVER['P

Java序列化之Restful接口调用

前段时间在做一个内部的数据处理项目时,系统之间会有HTTP方式的服务调用,当时我们采用的是Spring Rest编程方式,也就是使用Spring 提供的RestTemplate实现. 程序中在读取Excel文件中的数据调用Restful接口往后台发送之后,由于传送的数据是数组类型的集合,但是在后台获取的时候,数据类型编程了ArrayList类型,结果可能而知,在强制类型转换的时候报错java.lang.ClassCastException. 后来找到原因才发现,调用Restful接口的话,传送的

简淡 RESTful 接口

今天眼睛有点痛,早点下班回来,不想做饭,顿觉无聊,掐指一算,还是写点想法吧.写东西也是一个休息吧.就聊一下互联网的应用程序接口吧. 互联网最流行的应用程序接口,莫过于 RPC 与 RESTful.两者的一个重要区别是如何对待客户端,RPC 把客户端视为整个系统的一部分,服务器与客户端之间紧密耦合.而 RESTful 刚好相反,客户端与服务器之间,仅需要一个入口 URL. 国内绝大多数 Api,包括新浪微博之类的 HTTP/JSON Api,都是 RPC,RPC 的一个常见的问题就是接口的管理问题