id | hide_title | sidebar_label |
---|---|---|
base_request | true | BaseRequest 注解 |
@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);
}
@BaseRequest
注解中的所有字符串属性都可以通过模板表达式引用全局变量或方法中的参数。
/**
* 若全局变量中已定义 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(@DataVariable("baseUrl") String baseUrl);
}