• 三种方法实现调用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:  
    ");
    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 }
    复制代码
  • 相关阅读:
    点云处理算法核心-八叉树
    点云平台之cloudCompare开发三
    点云法向量估计方法
    PCL源码编译
    PCL裁剪之多边形裁剪
    点云平台PCLvisualization多边形裁剪方法初探
    点云合并pcl重载“+”
    点云平台之CloudCompare开发二
    点云平台之QtitanRibbon
    神舟电脑 战神ZX6-CT5A2 键盘失灵
  • 原文地址:https://www.cnblogs.com/xumaojun/p/8521602.html
Copyright © 2020-2023  润新知