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. *** ONObject; 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_ *** ON); //设置访问参数 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 = *** ONObject.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. *** ON; 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 *** ON.to *** ONString(userList); } @RequestMapping(path = "/get/{id}", method = {RequestMethod.GET, RequestMethod.POST}) public String get(@PathVariable("id") Integer id) { User user = userService.getUser(id); return *** ON.to *** ONString(user); } @RequestMapping(path = "/get2", method = {RequestMethod.GET, RequestMethod.POST}) public String get2(@RequestParam("id") Integer id) { User user = userService.getUser(id); return *** ON.to *** ONString(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 *** ON.to *** ONString(user); } }