(1)请求日志
请求日志会打印出所有请求发送的内容,其中包括请求行、请求头、请求体三部分
[Forest] Request:POST http://localhost:8080/test HTTPHeaders:accessToken: abcdefg123456Body: username=foo&password=bar(2)响应状态日志
响应状态日志包含了HTTP请求响应后接受到的状态码,以及响应时间
[Forest] Response: Status = 200, Time = 11ms(3)响应内容日志
响应内容日志则会打印出请求发送的目标服务器响应后,返回给请求接受方的实际数据内容
[Forest] Response: Content={"flag":"success","message":"成功"}此外,Forest还支持回调函数以及异步请求等 。
4.2 Forest进阶4.2.1 HTTPS(1)单向认证
如果访问的目标站点的SSL证书由信任的Root CA发布的,无需做任何事情便可以自动信任
public interface Gitee {@Request(url = "https://gitee.com")String index();}Forest的单向验证的默认协议为SSLv3,如果一些站点的API不支持该协议,可以在全局配置中将ssl-protocol属性修改为其它协议,如:TLSv1.1, TLSv1.2, SSLv2等等 。
forest:...ssl-protocol: TLSv1.2全局配置可以配置一个全局统一的SSL协议,但现实情况是有很多不同服务(尤其是第三方)的API会使用不同的SSL协议,这种情况需要针对不同的接口设置不同的SSL协议 。
/** * 在某个请求接口上通过 sslProtocol 属性设置单向SSL协议 */@Get(url = "https://localhost:5555/hello/user",sslProtocol = "SSL")ForestResponse<String> truestSSLGet();也可以在 @BaseRequest 注解中设置一整个接口类的SSL协议
@BaseRequest(sslProtocol = "TLS")public interface SSLClient {@Get("https://localhost:5555/hello/user")String testSend();}(2)双向认证
若是需要在Forest中进行双向验证的HTTPS请求,处理如下:
在全局配置中添加keystore配置:
forest: ... ssl-key-stores:- id: keystore1# id为该keystore的名称,必填file: test.keystore# 公钥文件地址keystore-pass: 123456# keystore秘钥cert-pass: 123456# cert秘钥protocols: SSLv3# SSL协议接着,在@Request中引入该keystore的id即可
@Request(url = "https://localhost:5555/hello/user",keyStore = "keystore1")String send();也可以在全局配置中配多个keystore:
forest:...ssl-key-stores:- id: keystore1# 第一个keystorefile: test1.keystorekeystore-pass: 123456cert-pass: 123456protocols: SSLv3- id: keystore2# 第二个keystorefile: test2.keystorekeystore-pass: abcdefcert-pass: abcdefprotocols: SSLv3...4.2.2 异常处理发送HTTP请求不会总是成功的,总会有失败的情况 。Forest提供多种异常处理的方法来处理请求失败的过程 。扩展:最全的java面试题库
(1)try-catch方式
最常用的是直接用try-catch 。Forest请求失败的时候通常会以抛异常的方式报告错误, 获取错误信息只需捕获ForestNetworkException异常类的对象,如示例代码所示:
/** * try-catch方式:捕获ForestNetworkException异常类的对象 */try {String result = myClient.send();} catch (ForestNetworkException ex) {int status = ex.getStatusCode();// 获取请求响应状态码ForestResponse response = ex.getResponse();// 获取Response对象String content = response.getContent();// 获取请求的响应内容String resResult = response.getResult();// 获取方法返回类型对应的最终数据结果}(2)回调函数方式
第二种方式是使用OnError回调函数,如示例代码所示:
/** * 在请求接口中定义OnError回调函数类型参数 */@Request(url = "http://localhost:8080/hello/user",headers = {"Accept:text/plain"},data = https://www.isolves.com/it/cxkf/kj/2022-10-27/"username=${username}")String send(@DataVariable("username") String username, OnError onError);调用的代码如下:
// 在调用接口时,在Lambda中处理错误结果myClient.send("foo",(ex, request, response) -> {int status = response.getStatusCode(); // 获取请求响应状态码String content = response.getContent(); // 获取请求的响应内容String result = response.getResult(); // 获取方法返回类型对应的最终数据结果});(3)ForestResponse
第三种,用ForestResponse类作为请求方法的返回值类型,示例代码如下:
/** * 用`ForestResponse`类作为请求方法的返回值类型, 其泛型参数代表实际返回数据的类型 */@Request(url = "http://localhost:8080/hello/user",headers = {"Accept:text/plain"},data = https://www.isolves.com/it/cxkf/kj/2022-10-27/"username=${username}")ForestResponse
推荐阅读
- 七里河|老者用这款“神饵”在七里河钓鱼,让他成为整条河最靓的“仔”
- 无刘海短发图片
- 安热沙|这款防晒霜真的好,夏天别人晒黑了我却没黑,没有安耐晒小金瓶
- 护肤品|护肤品真不是越贵越好,这款国产护肤品,价格便宜还超好用!
- 马云花18亿打造的这款车,销量惨不忍睹,你觉得这车怎么样?
- 抖音十大神曲排行榜
- 葛根鸡米汤怎么做?
- 洗发水|“清扬、阿道夫”用腻了?试试这款国货洗发水,虽平价却真心好用
- 帽子|李宁推出的这款服装是特色还是忘本?
- 只需4分钟轻松搞定减肥早餐
