android - 如果发生错误,如何使用Spring resttemplate和androidannotations从HttpResponse获取 header ?

标签 android spring rest error-handling android-annotations

如果发生错误,如何使用Spring resttemplate和androidannotations从HttpResponse获取 header ?

我知道如何在没有错误的情况下获取它们,但是在错误情况下我需要它们,因为我要使用的api发送了minorstatuscode来清除httpstatuscode。

最佳答案

基本上我找到了解决方案。

RestClient

@Rest(rootUrl = "https://proji.at/japi/v1", converters = { MappingJackson2HttpMessageConverter.class }, interceptors = { HttpBasicAuthenticatorInterceptor.class })
public interface ProjiRestClient extends RestClientErrorHandling {
    RestTemplate getRestTemplate();
}

ErrorHandler:
@EBean
public class ProjiResponseErrorHandler implements ResponseErrorHandler {
    private static final String TAG = "ProjiResponseErrorHandler";

    @Override
    public void handleError(ClientHttpResponse response) throws     IOException {
        int minor = 0;
        try {
            minor = Integer.parseInt(response.getHeaders().    getFirst("minor"));
        } catch (Exception e) {
            // TODO: handle exception
        }
        Log.i(TAG, "Response statuscode: " + response.getStatusCode() +     " minor: "
                + response.getHeaders().getFirst("minor"));

        throw new HttpMethodException(response.getStatusCode().value(),     minor);
    }

    @Override
    public boolean hasError(ClientHttpResponse response) throws     IOException {

        Log.i(TAG, "Response statuscode: " + response.getStatusCode());
        if (response.getStatusCode().value() >= 400) {
            return true;
        }
        return false;
    }

}

使用RestClient的片段:
@RestService
ProjiRestClient restClient;
@Bean
ProjiResponseErrorHandler projiErrorhandler;

@AfterInject
void afterInject() {
    restClient.getRestTemplate().setErrorHandler(projiErrorhandler);
}

然后您就可以从restClient调用方法了。
ResponseEntity<User> respone = restClient.getAuth(auth);

如果有人知道更好的解决方案,我将很高兴收到它的来信。

关于android - 如果发生错误,如何使用Spring resttemplate和androidannotations从HttpResponse获取 header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24417917/

相关文章:

android - 无法创建 2.3.3 Intel Atom AVD(未找到 userdata.img)

python - Django REST API 'get' 函数

java - 将 Spring @Async 放置在方法调用堆栈中的位置

java - 事务更改的子集有时在提交后不久不可见

java - 使用 PropertyOverrrideConfigurer 覆盖 bean 引用

rest - 如何通过HBase REST服务获取Phoenix表数据

python - flask REST API 错误 : The view function did not return a valid response

Android Viewpager EdgeEffect自定义颜色

java - 如何显示当前日期?安卓应用程序

java - 尝试从 Firebase 数据库获取数据,但总是获取空值