如果出现错误,如何使用Spring resttemplate和androidannotations从HttpResponse获取标题?

如果出现错误,如何使用Spring resttemplate和androidannotations从HttpResponse获取标题?,android,spring,rest,error-handling,android-annotations,Android,Spring,Rest,Error Handling,Android Annotations,如果出现错误,如何使用Spring resttemplate和androidannotations从HttpResponse获取标题 我知道如何在没有错误的情况下获取它们,但我需要它们,因为我想要使用的api发送一个minorstatuscode来清除httpstatuscode。基本上我找到了一个解决方案 RestClient @Rest(rootUrl = "https://proji.at/japi/v1", converters = { MappingJackson2HttpMessag

如果出现错误,如何使用Spring resttemplate和androidannotations从HttpResponse获取标题


我知道如何在没有错误的情况下获取它们,但我需要它们,因为我想要使用的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);
ResponseEntity respone=restClient.getAuth(auth);

如果有人知道更好的解决方案,我很高兴听到这个消息。

看看响应。如果有错误,这个好的图片是空的。是的。。我假设是因为发生错误时会引发异常,所以不会返回任何内容。我在OnRestClientExceptionSprown方法中找不到任何东西来获取标题,所以我还可以在哪里搜索?奇怪。ResponseEntity应该为您提供http头。hrmmmmmm.您确定错误也会发生这种情况吗?。。因为这毫无意义。。那该怎么办?向customerrorhandler或restclient.method()调用程序引发了一个异常。。因此,返回值必须为null。