http 400 Error 는 클라이언트쪽에서 발생한 Error 로 서버가 Client 에 이슈가 있어서 request 를 처리할 수 없을 때 발생하는 Error 이다. 이 에러를 처음 겪었을 때 내가 얻은 로그는 단 한줄 이었다.

09-24 17:18:39.847 D 22437    22437    MainActivity:    Status Code : 400 

 

당연히 뭐가 문제인지 알 수 없었는데 더 많은 정보를 얻기 위해서는 로그를 추가적으로 획득 하여야 한다.

이 때 사용하는게 loggin intercepter 이다.

 

build.gradle 에 아래의 라이브러리를 추가해준다.

Module: app

dependencies {
	...
	implementation 'com.squareup.okhttp3:logging-interceptor:3.12.1'
	...
}

Retrofit 객체에 intercepter 가 달린 client를 등록시켜준다.

OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder();
HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
clientBuilder.addInterceptor(loggingInterceptor);

Log.d(TAG,"initMyAPI : " + baseUrl);
Retrofit retrofit = new Retrofit.Builder()
        .baseUrl(baseUrl)
        .addConverterFactory(GsonConverterFactory.create())
        // client 를 등록해준다.
        .client(clientBuilder.build())

        .build();

mMyAPI = retrofit.create(MyAPI.class);

 

등록을 시킨 후 문제가 되는 request 를 하고 log 를보면 아래의 로그를 확인 할 수 있다.

log 의 TAG 는 OkHttp 이다.

09-24 17:26:51.977 D 29369    29369    MainActivity:     POST 
09-24 17:26:52.003 D 29369    30394    OkHttp      : --> POST http://27ad1bf3.ngrok.io/posts/ 
09-24 17:26:52.003 D 29369    30394    OkHttp      : Content-Type: application/json; charset=UTF-8 
09-24 17:26:52.004 D 29369    30394    OkHttp      : Content-Length: 24 
09-24 17:26:52.004 D 29369    30394    OkHttp      : {"title":"Android text"} 
09-24 17:26:52.005 D 29369    30394    OkHttp      : --> END POST (24-byte body) 
09-24 17:26:52.779 D 29369    30394    OkHttp      : <-- 400 Bad Request http://27ad1bf3.ngrok.io/posts/ (774ms) 

나 같은 경우에는 서버에 선언된 모델이 title 과 text, 두개의 field 를 가지고 있는데 현재 request 한 객체를 보니 title 만 set을 해주고 post를 해주고 있었다. 서버의 field 값과 post 한 객체 데이터를 동일하게 바꿔주니 성공적으로 post 가 되었다.

 

 

'Android' 카테고리의 다른 글

[Android] Retrofit 을 이용한 RestAPI Android 연동 예제  (5) 2019.09.24

+ Recent posts