gpt4 book ai didi

android - PATH 中的 Retrofit 和 Slash 字符

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:12:03 24 4
gpt4 key购买 nike

我正面临 Retrofit 的问题,我想找到一个合适的答案,因为我能想到的唯一方法是非常丑陋且不实用。

Retrofit PATH 注释在开头需要一个“/”(正如您可以阅读从库源代码中提取的这段代码:

/** Loads {@link #requestUrl}, {@link #requestUrlParamNames}, and {@link #requestQuery}. */
private void parsePath(String path) {
if (path == null || path.length() == 0 || path.charAt(0) != '/') {
throw methodError("URL path \"%s\" must start with '/'.", path);
}

我面临的问题是 PATH 部分来自响应对象中的后端,这意味着所有 PATH 的字符串之前在其他响应中已经从后端格式化如下:

Object : {
href: "/resources/login..."
}

如您所见,当包含这样的内容时,URL 会出现格式错误:

@GET("{/loginHref}")
void login(@EncodedPath("loginHref") String loginHref,
Callback<User> callback);

类似“http://mybaseurl.com//resources/login”的东西 *double//在资源前面

这肯定会导致某些端点出现问题,除了执行以下操作之外,我想不出真正简单的方法来解决此问题:

a) 修改我自己的改造版本以删除那个/字符检查(这是最后的手段)

b) 在使用接口(interface)中的方法之前截断 href(我想不惜一切代价避免这种情况,并且会在各处添加不必要的转换。

c) 拦截请求并正确形成 URL,以防这种情况发生(也是非常难看的解决方案)。

任何想法,建议?

谢谢!

最佳答案

我认为此链接会对您有所帮助 Path Replacement

您的新实现将如下所示。

@GET("/")
void login(Callback<User> callback);

您可以提供自定义端点实现,您可以在其上更改相对路径。

public final class CustomEndpoint implements Endpoint {
private static final String BASE = "http://192.168.1.64:5050/api/";

private String url;
private String href;

public CustomEndpoint(String href){
this.href = href;
url = BASE + this.href;
}

@Override public String getName() {
return "default";
}

@Override public String getUrl() {
if (url == null) throw new IllegalStateException("relative path not set.");
return url;
}
}

用法如下

RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint(new CustomEndPoint(object.href));
then restadapter.create........

希望对您有所帮助。

关于android - PATH 中的 Retrofit 和 Slash 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24018190/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com