Retrofit2 baseurl带?号及路径设置问题
1、.baseurl() 基础地址带"?"号(例如访问路径为: http://www.baidu.com/?/params)
当使用@Post({path})
Observable<Bean> getBean(@Path("path") String path,@Field("str") String filed)时,
请求的地址会变为 http://www.baidu.com/(你传入的path值) (例如: getBean("test","filed"),则请求地址为 http://www.baidu.com/test)
同上,如果baseurl()为 http://www.baidu.com/ 在getBean()时传入"?/params/test" 则实际请求地址扔为 http://www.baidu.com/test 原因是@Path("path") 接收的值只能为1 级目录即"test"不能带有"/";
有过拼接Get请求经验的同学应该知道,?后面将拼接参数,例如:http://www.baidu.com/?username=xxx&pswd=xxx
所以后台接口地址(基础地址)尽量不要乱带"?"号,很恶心的。
当然带了问号并不是没有解决办法:
@Post
Observable<Bean> getBean(@Url String url,@Field("str") String filed)
将baseurl设置为: http://www.baidu.com/ 将url写为“?/params/test“”即可
建议: 新建路由类,在路由类中定义
public class Router{
public static String BaseUrl ="http://www.baidu.com/"
public static String Prefix ="?/params/"
public static String rout1= Prefix+"rout1";
public static String rout2 = Prefix+"rout2";
.
.
.
}
使用时 .baseurl(Router.BaseUrl) 调用接口时 .getBean(Router.rout1,"field");
2.关于Url拼接问题的解答
@Post为接口处 + baseUrl为自定义 -> 实际请求路径
@Post("/list") +baseUrl("http://www.baidu.com/base/road") -> http://www.baidu.com/list
@Post("list") +baseUrl("http://www.baidu.com/base/road") -> http://www.baidu.com/base/list
@Post("list") +baseUrl("http://www.baidu.com/base/road/") -> http://www.baidu.com/base/road/list (期望地址)
3、关于打印日志,将请求的路径、返回的参数等打印出来 请参照《Retrofit2 日志的打印 》