springboot分层及各层作用(JavaSpringBootRestTemplate用法)
springboot分层及各层作用(JavaSpringBootRestTemplate用法)
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);
}
}