欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

restTemplate使用总结(不定期更新)

程序员文章站 2022-03-10 16:54:20
...

restTemplate是Spring提供的用语访问Rest服务的客户端

RestTemplate提供了多种便携式访问远程http服务方法,大大提高客户端的编写效率

RestTemplate底层使用的是java.net下的实现创建的http请求


HttpEntity和HttpHeaders 两个类是RestTemplate的好朋友,常一起使用

HttpHeaders 用来将请求头数据集中到一起

HttpEntity用来将请求体,请求头装入RestTemplate,

RestTemplate的exchange作为主要方法,各种请求最终都指向了exchange方法,该方法抛出了一个 RestClientException异常,该异常会对请求的返回数据进行校验,如果响应的状态码不为200,会把把响应体置空,拿不到响应数据。而实际生产开发中,需要获取不同状态码的返回结果,我们可以使用它的上层异常HttPStatusCodeException来对exchange方法的异常捕获,这样就可以把不同状态码的返回响应信息拿到。

上代码。

public Object gogogo(String url){
    try{
        HttpHeaders headers = new HttpHeaders();
        headers.set("Accept-Language","cn-就那个东西");
        ...
        HttpEntity<String> entity = new HttpEntity<String>(null,headers);
        //注 上行代码 null代表的是请求体,可以是HashMap对象等
        
        //关键的地方来了
        Resttamlate template = new RestTemplate();
        //此处的exchange可以有多种写法,各种请求比如template.getForEntity();...
        
        String a = template.exchange(url,HttpMethod.GET,entity,String.class).getBody();
        //url 请求地址例如:192.168.1.1:8080/hhhh/hhhh
        //HttpMethod.GET 声明请求方式为GET请求
        //entity 参数对象,包含请求体,请求头
        //String.class 返回结果的类信息,用来进行封装
       //到此刻调用接口已经完成,execute会抛出RestClientException异常,我们不使用它抛出的异常来接,他抛出的异常会置空responsebody,需要我们重写handleError才可以获取,很费劲。我们使用它的上级HttpStatusCodeException来接异常信息,这样就可以获取到响应体了。
    }catch(HttpStatusCodeException ex){
        //获取状态码
        int a = ex.getStatusCode();
        //重点,获取请求体并转化为字符,当然也可以转化为字节数组。
        String a = ex.getResponseBodyAsString();
    }
}

我们来看下源码:

我就不找有多少个方法最后指向了execute了,自己去找。

restTemplate使用总结(不定期更新)

我们可以看到exchange有多种参数,并且抛出了RestClientException异常,先回家,这个得慢慢找。