RestTemplate是什么?
RestTemplate 是从 Spring3.0 开始支持的一个 HTTP 请求工具,它提供了常见的REST请求方案的模版, 例如 GET 请求、POST 请求、PUT 请求、DELETE 请求以及一些通用的请求执行方法 exchange 以及 execute。
一般使用Apache的HttpClient
直接上代码,本博客只是介绍常用掉接口的方法!自行截取…
同意表面这里的常用的参数
- apiUrl 请求路径 例如: localhost:8080/api/test 。一般是
IP
+端口
+请求路径
RestTemplate 的常用请求
- getForEntity
简称GET请求,传参基本数据类型及String类型 等等
注意 : 如果属性有枚举
的 赋值会失败!
Client(客户端)
无参数
//返回值就是LoanFormVO的对象
NewTest newTest = oauth2RestTemplateWapper.getOAuth2RestTemplate().getForEntity(apiUrl, NewTest.class).getBody();
带参数
String name ="xxoo";
int age ="21";
//返回值就是NewTest 的对象
NewTest newTest = oauth2RestTemplateWapper.getOAuth2RestTemplate().
getForEntity(apiUrl.concat("?name={name}&age={age}"), NewTest.class,name,age).getBody();
后面参数可以带很多个,但是apiUrl要加上 参数名={参数名} 不然可能取不到!
Server (服务器)
无参数
@RequestMapping("/getObj")
public ResponseEntity getObj() {
NewTest newTest = newService.getObj();
return ResponseEntity.ok().body(newTest);
}
带参数
@RequestMapping("/getObj")
public ResponseEntity getObj(@RequestParam("name")String name,@RequestParam("age")int age) {
NewTest newTest = newService.getObjByVar(name,age);
return ResponseEntity.ok().body(newTest);
}
- postForObject
简称POST请求,可传参数 HttpEntity
类型
上面介绍了,把参数拼接在apiUrl后面的方法,这样如果参数太长会导致请求异常,当前这个方法把参数包含在了HttpEntity当中,且安全性提高!
Client(客户端)
请求参数
list
//参数
List list=new ArrayList<>();
list.add("英雄联盟");
list.add("和平精英");
//请求头
HttpHeaders headers = new HttpHeaders();
MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
headers.setContentType(type);
headers.add("Accept",MediaType.APPLICATION_JSON.toString());
//放参数
HttpEntity<Object> formEntity = new HttpEntity<Object>(list, headers);
//开始请求 返回值 定义Map
Map map = oauth2RestTemplateWapper.getOAuth2RestTemplate().postForObject(apiUrl, formEntity,Map.class);
请求参数
对象
User user=new User();
user.setId("1");
user.setName("苦逼程序员");
user.setAddress("上海");
//反正 没对象的单身狗 刚好new一个自己喜欢的对象 丢在第二个参数
String object = oauth2RestTemplateWapper.getOAuth2RestTemplate().postForObject(apiUrl,user, String.class);
Server (服务器)
接收参数
list
@PostMapping("getData")
public ResponseEntity getData(HttpServletRequest request) {
Map map = new ConcurrentHashMap();
List list=new ArrayList();
Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
//解析body获得参数
String tmpStr= null;
byte[] content = new byte[0];
try {
content = IOUtils.toByteArray(request.getInputStream());
tmpStr = new String(content,"UTF-8");
//解析出list
list=gson.fromJson(tmpStr,new TypeToken<List>(){}.getType());
} catch (IOException e) {
logger.info("同步资质申请数据:{e}",e);
}
return ResponseEntity.ok().body(null);
}
接收参数
对象
注意接收对象的服务器参数里面要交@RequestBody解析,不然可能属性赋值不上,就是对象属性全是null!
@PostMapping("saveUser")
public ResponseEntity saveUser(@RequestBody User user){
Integer integer = UserServce.saveUser(user);
return ResponseEntity.ok().body(integer);
}
希望能对观看的你有帮助!