Spring中http请求之RestTemplate

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()+"--->>>异步调用结束";
    }

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大浪淘沙胡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值