1、RestTemplate同步请求
(1)、getForEntity
@RequestMapping("/getDemo")
public String getDemo(){
url="http://localhost:8080/"
ResponseEntity<String> responseEntity=restTemplate.getForEntity(url, String.class);
String result=responseEntity.getBody;
return result.toString();
}
(2)、getForObject
Map<String,String> map= new HashMap<>();
map.put("name", "李四");
ResponseEntity<String> responseEntity=restTemplate.getForEntity(url+"{name}", String.class,map);
(3)、postForObject
ResponseEntity<Book> responseEntity=restTemplate.postForEntity(url, book, Book.class);
return responseEntity.getBody;
(4)、postForLocation
restTemplate.put(url+"{1}", book, 99);
restTemplate.delte(url+"{1}", 98);
2、AsyncRestTemplate异步请求
(1)、初始化
@Bean
public AsyncRestTemplate asyncRestTemplate(){
return new AsyncRestTemplate();
}
(2)、注入模板
@Autowired
private AsyncRestTemplate asyncRestTemplate;
(3)、异步方法调用
ListenableFuture<ResponseEntity<String>> forEntity = asyncRestTemplate.getForEntity(url, String.class);
(4)、处理回调
forEntity.addCallback(new ListenableFutureCallback<ResponseEntity<String>>() {
//调用失败
@Override
public void onFailure(Throwable ex) {
System.err.println("-----调用接口失败-------");
}
//调用成功
@Override
public void onSuccess(ResponseEntity<String> result) {
System.out.println("--->异步调用成功, result = "+result.getBody());
}
});
3、应用实例
@RestController
public class WebController {
@Autowired
private AsyncRestTemplate asyncRestTemplate;
@RequestMapping("/demo")
public String demo() {
try {
Thread.sleep(30000);
} catch (Exception e) {
e.printStackTrace();
}
return new Date()+"--->>>30秒。。。。";
}
@RequestMapping("/sync")
@ResponseBody
public String sync(){
//同步调用
RestTemplate template = new RestTemplate();
String url = "http://127.0.0.1:8080/demo";
String forObject = template.getForObject(url, String.class);
return "同步调用结束, 结果:" + forObject;
}
@RequestMapping("/async")
public String async() {
String url = "http://127.0.0.1:8080/demo";
ListenableFuture<ResponseEntity<String>> forEntity = asyncRestTemplate.getForEntity(url, String.class);
//异步调用后的回调函数
forEntity.addCallback(new ListenableFutureCallback<ResponseEntity<String>>() {
//调用失败
@Override
public void onFailure(Throwable ex) {
System.err.println("-----调用接口失败-------");
}
//调用成功
@Override
public void onSuccess(ResponseEntity<String> result) {
System.out.println("--->异步调用成功, result = "+result.getBody());
}
});
return new Date()+"--->>>异步调用结束";
}
}