三种方法实现调用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 }