三种方法实现调用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 retu "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 retu "post:" + param;19 }20 21 22 // 删除23 @RequestMapping(value = "delete/{param}", method = RequestMethod.DELETE)24 public @ResponseBody String delete(@PathVariable String param) {25 retu "delete:" + param;26 }27 28 // 查找29 @RequestMapping(value = "get/{param}", method = RequestMethod.GET)30 public @ResponseBody String get(@PathVariable String param) {31 retu "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) restServiceURL44 .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 retu "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 retu "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.setUseame(name); 58 retu u; 59 } 60 61 62 // 删除 63 @RequestMapping(value = "delete/{param}", method = RequestMethod.DELETE) 64 public @ResponseBody String delete(@PathVariable String param) { 65 retu "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.setUseame("爱爱啊"); 76 retu 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 retu 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().getUseame());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 retu user;43 44 }45 }
作者:港城人民
来源链接:https://www.cnblogs.com/taozhiye/p/6704659.html
版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。
2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。