🧁 接口注解
# @BaseRequest 注解
@BaseRequest
注解定义在接口类上,在@BaseRequest
上定义的属性会被分配到该接口中每一个方法上,但方法上定义的请求属性会覆盖@BaseRequest
上重复定义的内容。
因此可以认为@BaseRequest
上定义的属性内容是所在接口中所有请求的默认属性。
/**
* @BaseRequest 为配置接口层级请求信息的注解
* 其属性会成为该接口下所有请求的默认属性
* 但可以被方法上定义的属性所覆盖
*/
@BaseRequest(
baseURL = "http://localhost:8080", // 默认域名
headers = {
"Accept:text/plain" // 默认请求头
},
sslProtocol = "TLS" // 默认单向SSL协议
)
public interface MyClient {
// 方法的URL不必再写域名部分
@Get("/hello/user")
String send1(@Query("username") String username);
// 若方法的URL是完整包含http://开头的,那么会以方法的URL中域名为准,不会被接口层级中的baseURL属性覆盖
@Get("http://www.xxx.com/hello/user")
String send2(@Query("username") String username);
@Get(
url = "/hello/user",
headers = {
"Accept:application/json" // 覆盖接口层级配置的请求头信息
}
)
String send3(@Query("username") String username);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
@BaseRequest
注解中的所有字符串属性都可以通过模板表达式 (opens new window)引用全局变量 (opens new window)或方法中的参数。
/**
* 若全局变量中已定义 baseUrl 和 accept,
* 便会将全局变量中的值绑定到 @BaseRequest 的属性中
*/
@BaseRequest(
baseURL = "${baseUrl}", // 默认域名
headers = {
"Accept:${accept}" // 默认请求头
}
)
public interface MyClient {
// 方法的URL的域名将会引用全局变量中定义的 baseUrl
@Get("/hello/user")
String send1(@Query("username") String username);
// @BaseRequest 中的属性亦可以引用方法中的绑定变量名的参数
@Get("/hello/user")
String send2(@Var("baseUrl") String baseUrl);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 方法注解
在 Forest 中,方法注解(除了@Post
这类请求注解之外)也可以放置在 interface 接口上,其注解效果会涵盖接口下的所有方法
如果方法上有同样的注解,则会覆盖接口上注解的配置信息
/**
* @Backend 是一个方法维度的注解,但也可以挂在接口上
* 它可以为接口下的每一个方法请求设置HTTP后端框架
* 所以该接口下所有请求默认都会使用 OkHttp3
*/
@Backend("okhttp3")
@Address(host = "localhost", port = "8080")
public interface MyClient {
/**
* 使用接口默认后端框架,即 OkHttp3
*/
@Post("/data1")
String sendData1(@Body MyData data);
/**
* 使用接口默认后端框架,即 OkHttp3
*/
@Post("/data2")
String sendData2(@Body MyData data);
/**
* 使用了接口上相同的注解 @Backend
* 覆盖了改接口默认后端框架配置
* 所以该请求会使用 HttpClient 作为后端框架
*/
@Backend("httpclient")
@Post("/data3")
String sendData3(@Body MyData data);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
帮助我们改善此文档 (opens new window)
上次更新: 2023/06/19, 17:37:19