在Retrofit里,接口方法可以通过@POST注解指定请求相对地址。当后端把接口直接放在服务器根路径时,我们会用到@POST("/")这种写法。它表示的是向BaseUrl拼接后的根路径发送POST请求,而不是带额外路径段的子接口。

@POST("/")的基本用法
Retrofit要求注解里的路径以斜杠开头时,会替换掉BaseUrl的path部分,直接拼成最终地址。下面是最简单的接口声明方式。
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.POST;
public interface ApiService {
// 向根路径发送POST请求
@POST("/")
Call<String> postToRoot(@Body String body);
}
BaseUrl与路径拼接规则
如果BaseUrl配置为 https://api.ipipp.com/,那么@POST("/")最终请求地址就是 https://api.ipipp.com/。若BaseUrl为 https://api.ipipp.com/v1/,使用"/"会忽略v1,直接请求根域。常见拼接情况如下:
| BaseUrl | 注解路径 | 最终地址 |
|---|---|---|
| https://api.ipipp.com/ | / | https://api.ipipp.com/ |
| https://api.ipipp.com/v1/ | / | https://api.ipipp.com/ |
| https://api.ipipp.com/v1/ | data | https://api.ipipp.com/v1/data |
完整调用示例
下面代码展示如何构建Retrofit实例并发起根路径POST请求。
import retrofit2.Retrofit;
import retrofit2.converter.scalars.ScalarsConverterFactory;
import retrofit2.Call;
import retrofit2.Response;
public class Main {
public static void main(String[] args) throws Exception {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://api.ipipp.com/")
.addConverterFactory(ScalarsConverterFactory.create())
.build();
ApiService service = retrofit.create(ApiService.class);
Call<String> call = service.postToRoot("hello root");
Response<String> resp = call.execute();
System.out.println(resp.body());
}
}
常见注意点
- 确保BaseUrl以斜杠结尾,否则Retrofit会抛异常。
- @POST("/")不要写成@POST(""),空串会导致地址拼接错误。
- 如果后端要求根路径但带查询参数,可以用@Query追加,不影响根路径主体。
根路径POST在对接某些第三方回调或简化网关时很有用,但也要注意不要和带版本号的BaseUrl混用导致路由偏离。
小结
@POST("/")是Retrofit支持的合法写法,核心在于理解它与BaseUrl的替换关系。掌握之后就能稳妥地处理服务器根接口,减少联调时的路径疑惑。