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了,自己去找。
我们可以看到exchange有多种参数,并且抛出了RestClientException异常,先回家,这个得慢慢找。