RestTemplate<org.springframework.web.client.RestTemplate>
从Spring3.0开始支持的一个HTTP请求工具,提供了REST请求方案的模版,GET 请求、POST 请求、PUT请求、DELETE请求以及一些通用的请求执行方法exchange以及execute。
RestTemplate 继承自InterceptingHttpAccessor并且实现了RestOperations接口,其中,RestOperations接口定义了基本的 RESTful 操作,这些操作在RestTemplate中实现。
案例代码:
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestTemplate;
import org.what21.cloud.entity.User;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class RestTemplateGetForEntityDemo {
public static void getForEntityReturnBean(){
String url = "http://127.0.0.1:9001/user/get/1";
RestTemplate rest = new RestTemplate();
ResponseEntity<User> responseEntity = rest.getForEntity(url, User.class);
User user = responseEntity.getBody();
System.out.println(user);
}
public static void getForEntityReturnBean2(){
String url = "http://127.0.0.1:9001/user/get2?id={id}";
RestTemplate rest = new RestTemplate();
Map<String, Object> paramMap = new HashMap<String, Object>();
paramMap.put("id", 2);
ResponseEntity<String> responseEntity = rest.getForEntity(url,String.class,paramMap);
System.out.println(responseEntity.getBody());
}
public static void getForEntityReturnList(){
String url = "http://127.0.0.1:9001/user/list";
RestTemplate rest = new RestTemplate();
ResponseEntity<List> responseEntity = rest.getForEntity(url, List.class);
List<Map> dataList = responseEntity.getBody();
System.out.println(dataList);
for(Map map : dataList){
System.out.println(map.get("id") + "," + map.get("username")+"," + map.get("realName"));
}
}
public static void main(String[] args) {
getForEntityReturnBean();
getForEntityReturnBean2();
getForEntityReturnList();
}
}
import org.springframework.web.client.RestTemplate;
import org.what21.cloud.entity.User;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class RestTemplateGetForObjectDemo {
public static void getForObjectReturnBean(){
String url = "http://127.0.0.1:9001/user/get/1";
RestTemplate rest = new RestTemplate();
User user = rest.getForObject(url, User.class);
System.out.println(user);
}
public static void getForObjectReturnBean2(){
String url = "http://127.0.0.1:9001/user/get2?id={id}";
RestTemplate rest = new RestTemplate();
Map<String, Object> paramMap = new HashMap<String, Object>();
paramMap.put("id", 2);
String json = rest.getForObject(url,String.class,paramMap);
System.out.println(json);
}
public static void getForObjectReturnList(){
String url = "http://127.0.0.1:9001/user/list";
RestTemplate rest = new RestTemplate();
List<Map> dataList = rest.getForObject(url, List.class);
System.out.println(dataList);
for(Map map : dataList){
System.out.println(map.get("id") + "," + map.get("username")+"," + map.get("realName"));
}
}
public static void main(String[] args) {
getForObjectReturnBean();
getForObjectReturnBean2();
getForObjectReturnList();
}
}
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.client.HttpClient;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.impl.client.DefaultHttpRequestRetryHandler;
import org.apache.http.impl.client.HttpClientBuilder;
import org.springframework.http.*;
import org.springframework.http.client.*;
import org.springframework.web.client.RestTemplate;
import org.what21.cloud.entity.User;
import java.io.IOException;
import java.util.*;
@Slf4j
public class RestTemplateExchangeDemo {
static class RestTemplateConsumerLogger implements ClientHttpRequestInterceptor {
@Override
public ClientHttpResponse intercept(HttpRequest httpRequest, byte[] bytes, ClientHttpRequestExecution clientHttpRequestExecution) throws IOException {
// 传递header参数
HttpHeaders headers = httpRequest.getHeaders();
headers.add("header_name", "header_value");
headers.add("header_token", "token_value");
return clientHttpRequestExecution.execute(httpRequest, bytes);
}
}
public static RestTemplate restTemplate() {
//生成一个设置了连接超时时间、请求超时时间、异常重试次数3次
RequestConfig config = RequestConfig.custom().setConnectionRequestTimeout(10000).setConnectTimeout(10000).setSocketTimeout(30000).build();
HttpClientBuilder builder = HttpClientBuilder.create().setDefaultRequestConfig(config).setRetryHandler(new DefaultHttpRequestRetryHandler(3, false));
HttpClient httpClient = builder.build();
ClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient);
RestTemplate restTemplate = new RestTemplate(requestFactory);
restTemplate.setInterceptors(Collections.singletonList(new RestTemplateConsumerLogger()));
return restTemplate;
}
public static User getUser(RestTemplate restTemplate, String remoteUrl, Integer id) {
//设置Http的Header
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
//设置访问参数
HashMap<String, Object> params = new HashMap<>();
params.put("id", id);
//设置访问的Entity
HttpEntity entity = new HttpEntity<>(params, headers);
ResponseEntity<String> result = null;
try {
//发起一个POST请求
result = restTemplate.exchange(remoteUrl, HttpMethod.POST, entity, String.class);
User user = JSONObject.parseObject(result.getBody(), User.class);
return user;
} catch (Exception e) {
e.printStackTrace();
log.error("调用错误:" + e.getMessage());
}
return null;
}
public static void main(String[] args) {
RestTemplate restTemplate = restTemplate();
User user = getUser(restTemplate, "http://127.0.0.1:9001/user/get3", 3);
System.out.println(user);
}
}
import com.alibaba.fastjson.JSON;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.web.bind.annotation.*;
import org.what21.cloud.entity.User;
import org.what21.cloud.entity.param.UserGetParam;
import org.what21.cloud.service.IUserService;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
@Qualifier("userService")
IUserService userService;
@RequestMapping(path = "/list", method = {RequestMethod.GET})
public String list() {
List<User> userList = userService.listUsers();
return JSON.toJSONString(userList);
}
@RequestMapping(path = "/get/{id}", method = {RequestMethod.GET, RequestMethod.POST})
public String get(@PathVariable("id") Integer id) {
User user = userService.getUser(id);
return JSON.toJSONString(user);
}
@RequestMapping(path = "/get2", method = {RequestMethod.GET, RequestMethod.POST})
public String get2(@RequestParam("id") Integer id) {
User user = userService.getUser(id);
return JSON.toJSONString(user);
}
@RequestMapping(path = "/get3", method = {RequestMethod.GET, RequestMethod.POST})
public String get3(HttpServletRequest request, @RequestBody UserGetParam userGetParam) {
System.out.println("header_token = " + request.getHeader("header_token"));
System.out.println("header_name = " + request.getHeader("header_name"));
User user = userService.getUser(userGetParam.getId());
return JSON.toJSONString(user);
}
}