当前位置: 首页 > 知识库问答 >
问题:

如何获取改装成功响应状态代码

牛凌
2023-03-14

我无法从类似200201的响应中获取成功响应状态代码。。我们可以很容易地从error类中获得错误代码,比如error。isNetworkError()错误。getResponse()。getStatus()。是否有获取状态代码的解决方法

共有3个答案

公冶嘉茂
2023-03-14

我是通过以下代码实现的:

public abstract class BaseCallBack<T> {

    public abstract void onSuccess(Response<T> response);
    public abstract void onFailure(Response<T> response);
}

public abstract class SuccessCallback<T> extends BaseCallBack<T> implements Callback<T>{


    @Override
    public void onResponse(Call<T> call, Response<T> response) {

        if(response.code()>= 400 && response.code() < 599){
             onFailure(response);
        }
        else {
            onSuccess(response);
        }

    }

    @Override
    public void onFailure(Call<T> call, Throwable t){

    }

    @Override
    public void onSuccess(Response<T> response) {

    }

    @Override
    public void onFailure(Response<T> response) {

    }
}

当其余api返回400等时,默认情况下将调用onFailure方法。如果你想成功做某事:(当返回200等)

 ServiceConnector.api.getHomePage().enqueue(new SuccessCallback<Void>() {
        @Override
        public void onSuccess(Response<Void> response) {
            super.onSuccess(response);
        }
    });
裘嘉树
2023-03-14

您可以在success()中获取状态代码,就像在failure()中一样

@Override
public void success(Object object, Response response) {
    response.getStatus() // returns status code integer
}

因为在成功回调中有一个响应对象作为响应。getStatus()

编辑

我假设您正在使用okhttp进行改装。

okhttp有一个强大的工具,名为拦截器

您可以在改装回调之前捕获响应,并从响应中获取状态代码

OkHttpClient client = new OkHttpClient();
client.interceptors().add(new  Interceptor(){
    @Override 
    public Response intercept(Chain chain) throws IOException{

    Request request = chain.request();
    Response response = chain.proceed(request);
    response.code()//status code
    return response;

});

// then add it to you Restclient like this:
restAdapter = new RestAdapter.Builder()
                .setEndpoint(URL_SERVER_ROOT)
                .setClient(new OkClient(client))  //plus your configurations       
                .build();

要了解有关拦截器的更多信息,请访问此处。

吴镜
2023-03-14

根据改装2.0.2,现在呼叫

@Override
public void onResponse(Call<YourModel> call, Response<YourModel> response) {
    if (response.code() == 200) {
       // Do awesome stuff
    } else {
       // Handle other response codes
    }
}

希望它能帮助别人:-)

编辑:许多应用程序也可以受益于只检查一个子句中的成功(响应代码200-300),然后处理其他子句中的错误,因为201(创建)和202(接受)在大多数情况下可能会导致与200相同的应用程序逻辑。

@Override
public void onResponse(Call<YourModel> call, Response<YourModel> response) {
    if (response.isSuccessful()) {
       // Do awesome stuff
    } else if (response.code() == 401) {
       // Handle unauthorized
    } else {
       // Handle other responses
    }
}
 类似资料:
  • 如图所示,添加操作显示“响应类(状态200)”。但是,add操作的实现方式使其永远不会返回200。一旦成功,它就会返回201。 我的问题是如何将(状态200)更改为(状态201)?本部分代码如下: 谢谢

  • 问题内容: 调用JAX-WS端点时,如何获取HTTP响应代码? 在下面的示例代码中,在调用Web服务时可能会引发Exception,例如或。 在这种情况下,如何从HTTP响应中获取HTTP状态代码? 问题答案: 完成@Praveen答案后,您必须将变成原始值,然后从上下文中获取值。 如果您在托管的Web服务客户端中发生异常,请不要忘记将事务标记为回滚。

  • 我希望检索HTTP响应状态代码(例如,400、401、403、503等),以防请求失败(理想情况下也是成功)。在这段代码中,我使用HTTP Basic执行用户身份验证,并希望能够在用户错误键入密码时向用户发送身份验证失败的消息。 不幸的是,产生的错误似乎并不表示实际收到了HTTP状态代码409: 此外,在发生错误时检索HTTP正文会很好,因为我的服务器端将在那里放置错误的文本描述。 问题 是否可以

  • 在新的改型中,我正在打电话,并在响应和故障上覆盖两种方法。 如果对我的类模型进行了成功的解析响应改装,我可以得到简单的响应,但是如果(!response.issueccessful())我如何获得服务器响应呢? 我看到代码错误。原始反应。错误体。但没有看到来自服务器的响应。这是我的错误从服务器...如何从响应得到它?

  • 如何从的结果中获取HTTP状态?

  • 这样做的全部目的是,当用户被阻止时,前端会显示不同的错误消息,当找不到用户名和密码不正确时,前端会显示不同的消息。 我正试图根据异常消息更改响应错误状态。 此类扩展了并覆盖方法。每次身份验证失败时,都会调用方法。 即使响应状态设置为例如冲突,浏览器也会收到403个未经授权的错误。 我似乎无法以任何方式修改响应状态和消息/输出。 你会推荐什么样的解决方案来解决这个问题?