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

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 entity = new HttpEntity(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使用总结(不定期更新)_第1张图片

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

你可能感兴趣的:(restTamplate,spring,状态码)