문제, 어떻게 서버에서 예기치 않은 JSON 응답을 처리하는 오류 처리를 휴식,이 문제는 명확하게해야합니다안드로이드 주석이
ApiService 인터페이스 :
@Rest(
converters = MappingJackson2HttpMessageConverter.class,
interceptors = AuthInterceptor.class,
responseErrorHandler = MyErrorHandler.class)
public interface ApiService {
@Get("http://192.168.1.5:3000" + "/balance")
Balance getBalance();
...
}
MyErrorHandler 클래스 관련 부분
@Override
public boolean hasError(ClientHttpResponse response) throws IOException {
switch (response.getStatusCode()) {
case OK:
case CREATED:
return false;
default:
return true;
}
}
@Override
public void handleError(ClientHttpResponse response) throws IOException {
switch (response.getStatusCode()) {
case BAD_REQUEST:
Log.d(TAG, "handleError: bad request");
break;
default:
Log.d(TAG, "handleError: Default");
break;
}
}
MainActivity 관련 부분 (사용 장소)
@Override
public void onResume() {
super.onResume();
getBalance();
}
@Background
void getBalance() {
showBalance(apiService.getBalance());
}
// show balance is accessing Balance fields and showing it on screen
이 기능은 서버가 반환 할 내용을 반환 할 때 유용하지만, Json 파서가 응답을 구문 분석 할 수 없기 때문에 (예 : 오류 코드 400 및 Balance 클래스에없는 키를 사용하는 json을 반환합니다.) 앱이 충돌합니다.
try catch에서 showBalance()를 래핑 할 수 있지만, 다른 곳에서 ApiService의 getBalance()를 더 많이 사용하는 경우, 모든 것을 수행해야합니다. MyErrorHandler에서 응용 프로그램의 흐름을 깰 수있는 방법이 있나요이 때, 나는 ResponseErrorHandler을 사용했다
'오류 처리'벨소리가 울리나요? –
handleError()에서 앱이 응답을 Balance 객체로 변환하지 못하도록하려면 어떻게해야합니까, 현재 어떻게되어 있는지, 오류가 발생했는지 감지하고 여전히 json을 잔액으로 변환하려고 시도합니다. – dzingiskan
아니요, 가정의 문제를 일으킬 수있는 코드를 작성해야합니다. 즉, SQL 쿼리가 실패했거나 어떤 이유로 든 HTTP 요청이 실패했습니다. 일단 당신이 그것을 얻으면, 당신은 중간 단계의 실패 때문에 당신은 그럴 준비가되기 때문에 부서지지 않을 것입니다. 이것이 당신의 접근 방식이 지금 부족한 것입니다. –