retrofit 2 404 not found

6 浏览
0 Comments

retrofit 2 404 not found

我试图使用retrofit,但是我得到了404代码和消息“未找到”

响应{protocol=http/1.1, code=404, message=Not Found}

我可以在我的服务器日志中看到请求成功,并且响应是一个对象

我以前使用Gson解析它

{

"codigoRespuesta": "00",

"descRespuesta": "成功",

"token": "0bc6e8a352a002db5782ae729501fd05bd825cf165864a0ab32d1ab1529001ed2583df4a5ab257a30f97117ec0fec0b6df60adf288fd6b1579f31d2d636d9aa"

}

所以我正在使用与异步请求一起使用的相同对象与retrofit

public class AuthenticationResponse extends Response {
private String token;
public AuthenticationResponse() {
}
public AuthenticationResponse(String codigoRespuesta, String descRespuesta) {
    super(codigoRespuesta, descRespuesta);
}
public AuthenticationResponse(String codigoRespuesta, String descRespuesta, String token) {
    super(codigoRespuesta, descRespuesta);
    this.token = token;
}
public String getToken() {
    return this.token;
}
public void setToken(String token) {
    this.token = token;
}
public String toString() {
    return "AuthenticationResponse{token=" + this.token + ", " + super.toString() + '}';
}

}

@XmlRootElement
public class Response {
private String codigoRespuesta;
private String descRespuesta;
public Response() {
}
public Response(String codigoRespuesta, String descRespuesta) {
    this.codigoRespuesta = codigoRespuesta;
    this.descRespuesta = descRespuesta;
}
@XmlElement
public String getCodigoRespuesta() {
    return this.codigoRespuesta;
}
public void setCodigoRespuesta(String codigoRespuesta) {
    this.codigoRespuesta = codigoRespuesta;
}
@XmlElement
public String getDescRespuesta() {
    return this.descRespuesta;
}
public void setDescRespuesta(String descRespuesta) {
    this.descRespuesta = descRespuesta;
}
public String toString() {
    return "codigoRespuesta=" + this.codigoRespuesta + ", descRespuesta=" + this.descRespuesta;
}

}

这个项目是基于这个例子的

github项目

我的retrofit接口

public interface servicesTutorial {
@GET("usersFake")
Call> getUsersGet();
@POST("usersFake")
Call> getUsersPost();
@POST("login")
Call doLogin(@Body RequestLogin request);

}

我的MainActivity类

    public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Gson gson = new GsonBuilder()
                .setLenient()
                .create();
        final String url = "https://myurl.com/";
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(url)
                .addConverterFactory(GsonConverterFactory.create(gson))
                .build();
        servicesTutorial serviceTuto = retrofit.create(servicesTutorial.class);
        Call call2 = serviceTuto.doLogin(new RequestLogin("user","pwd"));
        call2.enqueue(new Callback() {
            @Override
            public void onResponse(Call call, Response response) {
                Log.e("testing", "respuesta: "+response.message()+" *** "+response.code()+" *** "+response.isSuccessful() +
                        " *** " + response.raw().toString());
            }
            @Override
            public void onFailure(Call call, Throwable t) {
                Log.e("testing",t.toString());
            }
        });
}
}


编辑:

最后我弄明白了,显然因为我的服务是用Java和Spring制作的,所以我必须向我的请求添加一个头部("Accept: application/json")

0
0 Comments

问题出现的原因可能是以下几个方面:

1. 如果您的服务是本地的,可以尝试使用以下地址进行访问:

- 如果使用的是Genymotion模拟器:http://10.0.3.2/

- 如果使用的是默认的AVD模拟器:http://10.0.2.2/

2. 检查您的端点是否正确,例如:

usersFake

login

3. 如果您的本地服务使用了nginx,可能会导致在模拟器中无法访问。确认您的服务不是本地的,并且端点是正确的,但是在retrofit的回调函数中返回的响应为空。

4. 可能是由于您的JSON响应不正确,建议使用以下页面进行验证:

- jsonschema2pojo.org

- jsonlint.com

解决方法:

如果遇到(retrofit 2 404 not found)的问题,可以尝试以下解决方法:

1. 如果使用的是Genymotion模拟器,使用http://10.0.3.2/进行访问;如果使用的是默认的AVD模拟器,使用http://10.0.2.2/进行访问。

2. 检查您的端点是否正确,例如:usersFakelogin

3. 确认您的服务不是本地的,并且端点是正确的,但是在retrofit的回调函数中返回的响应为空。

4. 验证您的JSON响应是否正确,可以使用jsonschema2pojo.orgjsonlint.com进行验证。

希望以上解决方法能够帮助您解决(retrofit 2 404 not found)的问题。

0
0 Comments

昨天我遇到了同样的问题。试试这个方法:

在浏览器中检查你的工作URL。如果你的URL端点有任何扩展名,比如.php,那么在你的GET/POST注解参数中添加它,并且写全名,比如("userFake.php")

这个方法对我起了作用,希望对你也有效。

你好,我的服务是一个Java服务,端点是正常的,我可以在服务器端看到请求,也可以在服务器端看到响应,但是retrofit收到了一个空响应:(

首先,使用Postman检查来自手机/电视的问题。

0
0 Comments

原因:出现(retrofit 2 404 not found)问题的原因是基本URL的更改导致的。

解决方法:将基本URL更改为"http://abcd.com/abcd/index.php/",并且将终端点更改为"api/Abcd_controller/users"。

更多详情请参考此链接

希望这对你也有用。谢谢。

0