版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
RestTemplate 使用案例
当我们使用SpringBoot时,偶尔需要使用HttpClient进行接口访问等。
而,在SpringBoot 中,内置了一个工具类RestTemplate
。
在微服务之间相互调用时,也可以使用,虽然没有FeignClient
方便,但是性能却是非常出色的。
1.调用有两种方法
...ForEntity
...ForObject
比较
...ForObject()
比...ForEntity()
多包含了将结果中的属性转成对象的功能,而...ForEntity
可以拿到请求头等信息。所以,具体用哪种方法还是要看实际情况。
其中...ForObject
方法如下,使用实体类接受,传入实体类即可。
User user = restTemplate.getForObject(UrlConstants.TEST_ONE_URL, User.class);
以下演示使用...ForEntity
方法。
2.RestTemplate对象创建声明。
如果使用Spring,可直接声明Bean
,如下
SpringBoot可在Application.java中添加。
@Bean(value = "baseRestTemplate")
public RestTemplate restTemplate(){
return new RestTemplate();
}
其他地方使用,使用注解声明。
@Autowired
RestTemplate restTemplate;
2.Get不带参数调用
ResponseEntity<String> forObject = restTemplate.getForEntity("http://127.0.0.1:18980/api/get", String.class);
// 获取请求体信息,转换为JSON对象。
JSONObject jsonObject = JSONUtil.parseObj(forObject.getBody());
3.Get带参数调用
注意url中的占位符
// 注意url中的占位符
String url= "http://127.0.0.1:18980/api/getParams?name={name}&age={age}&sex={sex}&tel={tel}";
Map<String, Object> params = new HashMap<>();
params.put("name", "restTemplate");
params.put("age", 22);
params.put("sex", 1);
params.put("tel", "515611");
ResponseEntity<String> forObject = restTemplate.getForEntity(url, String.class, params);
// 获取请求体信息,转换为JSON对象。
JSONObject jsonObject = JSONUtil.parseObj(forObject.getBody());
4.Post不带参数调用
ResponseEntity<String> forObject = restTemplate.postForEntity("http://127.0.0.1:18980/api/post", null, String.class);
// 获取请求体信息,转换为JSON对象。
JSONObject jsonObject = JSONUtil.parseObj(forObject.getBody());
5.Post带参数调用
Map<String, Object> params = new HashMap<>();
params.put("name", "restTemplate");
params.put("age", 22);
params.put("sex", 1);
params.put("tel", "515611");
ResponseEntity<String> forObject = restTemplate.postForEntity("http://127.0.0.1:18980/api/postParams", params, String.class);
// 获取请求体信息,转换为JSON对象。
JSONObject jsonObject = JSONUtil.parseObj(forObject.getBody());
6.提供一个测试Controller
@Controller
@ResponseBody
@RequestMapping(value = "api")
public class HttpController {
@Autowired
RestTemplate restTemplate;
@GetMapping("/get")
public HashMap<String, Object> getApiState() {
HashMap<String, Object> map = new HashMap<>(4);
int code = 200;
String msg = "Get Message";
List<Object> data = new ArrayList<>(4);
data.add("list1");
data.add("list2");
data.add("list3");
data.add("list4");
map.put("code", code);
map.put("msg", msg);
map.put("data", data);
return map;
}
@GetMapping("/getParams")
public HashMap<String, Object> getParams(User user) {
System.out.println(user);
HashMap<String, Object> map = new HashMap<>(4);
int code = 200;
String msg = "Get Message";
map.put("code", code);
map.put("msg", msg);
map.put("data", user);
return map;
}
@PostMapping("/post")
public HashMap<String, Object> post() {
HashMap<String, Object> map = new HashMap<>(4);
int code = 202;
String msg = "Get Message";
User user = new User();
user.setName("ltz");
user.setAge(19);
user.setSex(0);
user.setTel("15857855");
map.put("code", code);
map.put("msg", msg);
map.put("data", user);
return map;
}
@PostMapping("/postParams")
public HashMap<String, Object> post(@RequestBody User user) {
System.out.println(user);
HashMap<String, Object> map = new HashMap<>(4);
int code = 201;
String msg = "Post Message";
map.put("code", code);
map.put("msg", msg);
map.put("data", user);
return map;
}
}
@Data
class User {
private String name;
private Integer age;
private Integer sex;
private String tel;
}