三種方式實現遠端restful 介面呼叫
1,基本介紹
Restful介面的呼叫,前端一般使用ajax呼叫,後端可以使用的方法比較多,
本次介紹三種:
1.HttpURLConnection實現
2.HttpClient實現
3.Spring的RestTemplate
2,HttpURLConnection實現
-
@Controller
-
public class RestfulAction {
-
@Autowired
-
private UserService userService;
-
// 修改
-
@RequestMapping(value = "put/{param}", method = RequestMethod.PUT)
-
public @ResponseBody String put(@PathVariable String param) {
-
return "put:" + param;
-
}
-
// 新增
-
@RequestMapping(value = "post/{param}", method = RequestMethod.POST)
-
public @ResponseBody String post(@PathVariable String param,String id,String name) {
-
System.out.println("id:"+id);
-
System.out.println("name:"+name);
-
return "post:" + param;
-
}
-
// 刪除
-
@RequestMapping(value = "delete/{param}", method = RequestMethod.DELETE)
-
public @ResponseBody String delete(@PathVariable String param) {
-
return "delete:" + param;
-
}
-
// 查詢
-
@RequestMapping(value = "get/{param}", method = RequestMethod.GET)
-
public @ResponseBody String get(@PathVariable String param) {
-
return "get:" + param;
-
}
-
// HttpURLConnection 方式呼叫Restful介面
-
// 呼叫介面
-
@RequestMapping(value = "dealCon/{param}")
-
public @ResponseBody String dealCon(@PathVariable String param) {
-
try {
-
String url = "http://localhost:8080/tao-manager-web/";
-
url+=(param+"/xxx");
-
URL restServiceURL = new URL(url);
-
HttpURLConnection httpConnection = (HttpURLConnection) restServiceURL
-
.openConnection();
-
//param 輸入小寫,轉換成 GET POST DELETE PUT
-
httpConnection.setRequestMethod(param.toUpperCase());
-
// httpConnection.setRequestProperty("Accept", "application/json");
-
if("post".equals(param)){
-
//開啟輸出開關
-
httpConnection.setDoOutput(true);
-
// httpConnection.setDoInput(true);
-
//傳遞引數
-
String input = "&id="+ URLEncoder.encode("abc", "UTF-8");
-
input+="&name="+ URLEncoder.encode("啊啊啊", "UTF-8");
-
OutputStream outputStream = httpConnection.getOutputStream();
-
outputStream.write(input.getBytes());
-
outputStream.flush();
-
}
-
if (httpConnection.getResponseCode() != 200) {
-
throw new RuntimeException(
-
"HTTP GET Request Failed with Error code : "
-
+ httpConnection.getResponseCode());
-
}
-
BufferedReader responseBuffer = new BufferedReader(
-
new InputStreamReader((httpConnection.getInputStream())));
-
String output;
-
System.out.println("Output from Server: \n");
-
while ((output = responseBuffer.readLine()) != null) {
-
System.out.println(output);
-
}
-
httpConnection.disconnect();
-
} catch (MalformedURLException e) {
-
e.printStackTrace();
-
} catch (IOException e) {
-
e.printStackTrace();
-
}
-
return "success";
-
}
-
}
3.HttpClient實現
-
package com.taozhiye.controller;
-
import org.apache.http.HttpEntity;
-
import org.apache.http.HttpResponse;
-
import org.apache.http.NameValuePair;
-
import org.apache.http.client.HttpClient;
-
import org.apache.http.client.entity.UrlEncodedFormEntity;
-
import org.apache.http.client.methods.HttpDelete;
-
import org.apache.http.client.methods.HttpGet;
-
import org.apache.http.client.methods.HttpPost;
-
import org.apache.http.client.methods.HttpPut;
-
import org.apache.http.impl.client.HttpClients;
-
import org.apache.http.message.BasicNameValuePair;
-
import org.springframework.beans.factory.annotation.Autowired;
-
import org.springframework.stereotype.Controller;
-
import org.springframework.web.bind.annotation.PathVariable;
-
import org.springframework.web.bind.annotation.RequestMapping;
-
import org.springframework.web.bind.annotation.RequestMethod;
-
import org.springframework.web.bind.annotation.ResponseBody;
-
import com.fasterxml.jackson.databind.ObjectMapper;
-
import com.taozhiye.entity.User;
-
import com.taozhiye.service.UserService;
-
import java.io.BufferedReader;
-
import java.io.IOException;
-
import java.io.InputStreamReader;
-
import java.io.OutputStream;
-
import java.net.HttpURLConnection;
-
import java.net.MalformedURLException;
-
import java.net.URL;
-
import java.net.URLEncoder;
-
import java.util.ArrayList;
-
import java.util.List;
-
@Controller
-
public class RestfulAction {
-
@Autowired
-
private UserService userService;
-
// 修改
-
@RequestMapping(value = "put/{param}", method = RequestMethod.PUT)
-
public @ResponseBody String put(@PathVariable String param) {
-
return "put:" + param;
-
}
-
// 新增
-
@RequestMapping(value = "post/{param}", method = RequestMethod.POST)
-
public @ResponseBody User post(@PathVariable String param,String id,String name) {
-
User u = new User();
-
System.out.println(id);
-
System.out.println(name);
-
u.setName(id);
-
u.setPassword(name);
-
u.setEmail(id);
-
u.setUsername(name);
-
return u;
-
}
-
// 刪除
-
@RequestMapping(value = "delete/{param}", method = RequestMethod.DELETE)
-
public @ResponseBody String delete(@PathVariable String param) {
-
return "delete:" + param;
-
}
-
// 查詢
-
@RequestMapping(value = "get/{param}", method = RequestMethod.GET)
-
public @ResponseBody User get(@PathVariable String param) {
-
User u = new User();
-
u.setName(param);
-
u.setPassword(param);
-
u.setEmail(param);
-
u.setUsername("愛愛啊");
-
return u;
-
}
-
@RequestMapping(value = "dealCon2/{param}")
-
public @ResponseBody User dealCon2(@PathVariable String param) {
-
User user = null;
-
try {
-
HttpClient client = HttpClients.createDefault();
-
if("get".equals(param)){
-
HttpGet request = new HttpGet("http://localhost:8080/tao-manager-web/get/"
-
+"啊啊啊");
-
request.setHeader("Accept", "application/json");
-
HttpResponse response = client.execute(request);
-
HttpEntity entity = response.getEntity();
-
ObjectMapper mapper = new ObjectMapper();
-
user = mapper.readValue(entity.getContent(), User.class);
-
}else if("post".equals(param)){
-
HttpPost request2 = new HttpPost("http://localhost:8080/tao-manager-web/post/xxx");
-
List<NameValuePair> nvps = new ArrayList<NameValuePair>();
-
nvps.add(new BasicNameValuePair("id", "啊啊啊"));
-
nvps.add(new BasicNameValuePair("name", "secret"));
-
UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(nvps, "GBK");
-
request2.setEntity(formEntity);
-
HttpResponse response2 = client.execute(request2);
-
HttpEntity entity = response2.getEntity();
-
ObjectMapper mapper = new ObjectMapper();
-
user = mapper.readValue(entity.getContent(), User.class);
-
}else if("delete".equals(param)){
-
}else if("put".equals(param)){
-
}
-
} catch (Exception e) {
-
e.printStackTrace();
-
}
-
return user;
-
}
-
}
4.Spring的RestTemplate
springmvc.xml增加
-
<!-- 配置RestTemplate -->
-
<!--Http client Factory -->
-
<bean id="httpClientFactory"
-
class="org.springframework.http.client.SimpleClientHttpRequestFactory">
-
<property name="connectTimeout" value="10000" />
-
<property name="readTimeout" value="10000" />
-
</bean>
-
<!--RestTemplate -->
-
<bean id="restTemplate" class="org.springframework.web.client.RestTemplate">
-
<constructor-arg ref="httpClientFactory" />
-
</bean>
controller
-
@Controller
-
public class RestTemplateAction {
-
@Autowired
-
private RestTemplate template;
-
@RequestMapping("RestTem")
-
public @ResponseBody User RestTem(String method) {
-
User user = null;
-
//查詢
-
if ("get".equals(method)) {
-
user = template.getForObject(
-
"http://localhost:8080/tao-manager-web/get/{id}",
-
User.class, "嗚嗚嗚嗚");
-
//getForEntity與getForObject的區別是可以獲取返回值和狀態、頭等資訊
-
ResponseEntity<User> re = template.
-
getForEntity("http://localhost:8080/tao-manager-web/get/{id}",
-
User.class, "嗚嗚嗚嗚");
-
System.out.println(re.getStatusCode());
-
System.out.println(re.getBody().getUsername());
-
//新增
-
} else if ("post".equals(method)) {
-
HttpHeaders headers = new HttpHeaders();
-
headers.add("X-Auth-Token", UUID.randomUUID().toString());
-
MultiValueMap<String, String> postParameters = new LinkedMultiValueMap<String, String>();
-
postParameters.add("id", "啊啊啊");
-
postParameters.add("name", "部版本");
-
HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<MultiValueMap<String, String>>(
-
postParameters, headers);
-
user = template.postForObject(
-
"http://localhost:8080/tao-manager-web/post/aaa", requestEntity,
-
User.class);
-
//刪除
-
} else if ("delete".equals(method)) {
-
template.delete("http://localhost:8080/tao-manager-web/delete/{id}","aaa");
-
//修改
-
} else if ("put".equals(method)) {
-
template.put("http://localhost:8080/tao-manager-web/put/{id}",null,"bbb");
-
}
-
return user;
-
}
-
}