Spring框架之Get请求下的RestTemplate的getForObject和getForEntity的用法,Post请求下的postForObject,postForEntity的用法。
前言
本篇blog将介绍Spring管理下的RestTemplate模板在Get请求和Post请求下的不同用法,因为Get请求下和Post请求下的用法几乎一样,所以这里只对Get请求下的用法做介绍,Post请求下的参考Get请求即可!
主要包含:
1.准备工作;
2.RestTemplate模板的Get请求之GetForObject方式;
3.RestTemplate模板的Get请求之GetForEntity方式;
3.RestTemplate模板的Post请求demo;
一、准备工作
本例中涉及到三种后端接收参数的方式,注意看接口url的不同之处。先来介绍一下:
1.@RequestParam,可用于Get请求,也可用于Post请求;
@GetMapping("/test2/hello")
public String Test1(@RequestParam("name")String name){}
2.@PathVariable,用于Get请求,Post请求亦可;
@GetMapping("/test2/hello2/{name}")
public String Test2(@PathVariable("name") String name){}
3.@RequestBody,用于Post请求;
@PostMapping("/test2/hello3")
public String Test3(@RequestBody String name){}
二、RestTemplate模板的Get请求之GetForObject方式
1.构造函数
1.1 getForObject的构造函数
public <T> T getForObject(String url, Class<T> responseType,Object... uriVariables);
public <T> T getForObject(String url, Class<T> responseType,Map<String, ?> uriVariables);
public <T> T getForObject(URI url, Class<T> responseType);
1.2 getForEntity的构造函数
public <T> T getForEntity(String url, Class<T> responseType, Object... uriVariables);
public <T> T getForEntity(String url, Class<T> responseType, Map<String, ?> uriVariables);
public <T> T getForEntity(URI url, Class<T> responseType);
2.Get请求方式又分为GetForObject和GetForEntity两种
2.1 GetForObject形式
2.1.1 public T getForObject(URI url, Class responseType)
restTemplate.getForObject("http://localhost:8083/test1/hello?name="+name,String.class);
2.1.2 public T getForObject(String url, Class responseType,Object… uriVariables)
restTemplate.getForObject("Http://localhost:8083/test1/hello1/{name}",String.class,name);
2.1.3 public T getForObject(String url, Class responseType,Map<String, ?> uriVariables)
注意:使用map传参需要固定RestTemplate访问的uri格式。
@GetMapping("/test2/hello3/{name}/{age}")
public String Test3(@PathVariable("name") String name,@PathVariable("age") int age){
Map<String, Object> hashMap = new HashMap<>();
hashMap.put("name",name);
hashMap.put("age",age);
return restTemplate.getForObject("http://localhost:8083/test1/hello2/{name}/{age}",String.class,hashMap);
}
2.2 GetForEntity形式
注:GetForEntity和GetForObject用法几乎一致,只有细微差别,前者可以查看请求状态码,请求头信息。
2.2.1 public T GetForEntity(URI url, Class responseType)
@GetMapping("/test2/hello")
public String Test1(@RequestParam("name")String name){
ResponseEntity<String> forEntity = restTemplate.getForEntity("http://localhost:8083/test1/hello?name=" + name, String.class);
if (forEntity.getStatusCodeValue() == 200){
//获取状态码
forEntity.getStatusCode();
//获取请求头
forEntity.getHeaders();
//获取请求体内容
return forEntity.getBody();
}
return null;
}
2.2.2 public T GetForEntity(String url, Class responseType,Object… uriVariables)
@GetMapping("/test2/hello2/{name}/{age}")
public String Test2(@PathVariable("name") String name,@PathVariable int age){
System.out.println(name+" "+age);
System.out.println("test2/hello2");
ResponseEntity<String> forEntity = restTemplate.getForEntity("Http://localhost:8083/test1/hello1/{name}", String.class, name);
if (forEntity.getStatusCodeValue() == 200){
return forEntity.getBody();
}
return null;
}
2.2.3 public T GetForEntity(String url, Class responseType,Map<String, ?> uriVariables)
注意:使用map传参需要固定RestTemplate访问的uri格式。
@GetMapping("/test2/hello3/{name}/{age}")
public String Test3(@PathVariable("name") String name,@PathVariable("age") int age){
Map<String, Object> hashMap = new HashMap<>();
hashMap.put("name",name);
hashMap.put("age",age);
ResponseEntity<String> forEntity = restTemplate.getForEntity("http://localhost:8083/test1/hello2/{name}/{age}", String.class, hashMap);
if(forEntity.getStatusCodeValue() == 200){
return forEntity.getBody();
}
return null;
}
3.RestTemplate模板的Post请求demo
注:Post请求方式和Get请求方式基本一样,包括postForObject和postForEntity两种,需要注意Post请求接参数的注解用的是@RequestBody,具体举一个例子,其他的请参考Get请求方式:
@PostMapping("/test2/hello3")
public String Test3(@RequestBody String name){
System.out.println("test2/hello3");
return restTemplate.postForObject("http://localhost:8083/test1/hello2",name,String.class);
}
总结
以上内容就是关于restTemplate模板在两种请求方式:Get请求和Post请求下的访问形式,因本人也在学习中,如有错误不足之处欢迎大佬进行指正。希望对你能有所帮助。