작성
·
324
0
강의 잘 듣고 있습니다.
강의참고하면서 다른 API조회하는 통신을 해보려고하는데,
해당API의 request는
POST 형태로 String, Int가 포함된 갓을 요청받습니다.
하여
@FormUrlEncoded
@POST("end_point")
suspend fun func( @Field ("aa") aa:String
, @Field("bb") bb:Int ) : aaa
형태로 서비스인터페이스를 작성하였습니다.
허나 해당 서버(?)에서 aa,bb 모두 String 형태로 값이 넘어와 제대로된 response를 받지못하고 있습니다.
검색 해보니, 전송할 값들을 @Body에 담아보내면 Int형을 그대로 보내진다하여 적용해봤지만, Json형태로 정송되어 이 또한 정상적으로 response를 받지 못했습니다.
이와 관련하여 더 참고할 수 있는 부분이 있을까 조언 구합니다.
((retrofit통신시 Field가 Int에서 String으로 바뀌는 문제))
답변 11
0
Retrofit은 워낙 사용법이 간단해서 이렇게 문제가 지속될 확률이 적은데 서버쪽 문제는 아닐까요?
로그는 HttpLoggingInterceptor 로 확인하는 방법이 최선이고요.
Retrofit이 서드파티 라이브러리라서 안드로이드 공식문서에서는 가이드 제공이 없습니다.
0
네..
그럼 지금 타임아웃 에러만 계속 나는데..
다른 에러를 확인할 방법이 있을까요..?
자바에서 enqueue-callback 으로 통신할때
onFailure에서 확인 할 수있는것처럼
아예 통신이 되지 않았을때 활인할 수 있는 로그는 어떻게 남길 수 있을까요..
현재느 통신할때 HttpLoggingInterceptor만 사용해서 확인하는데
안드로이드 공식문서에서 잘 못찾겠어서요..
혹시 어느부분을 확일해야 할지..
0
0
제가 요즘에 바뻐서 테스트해 볼 시간이 없었는데요. 오늘중으로 테스트 해 보고 결과 알려드리겠습니다.
참고로 안드로이드에서 커넥션 타임아웃이 10초 넘어가면 응답없음으로 규정하니 1분으로 늘리시면 안 됩니다.
0
같은 문제로 자꾸 귀찮게 해드리는거같네요..
@FormUrlEncoded 제거하고 @Body로 보내면 각각파라메타의 타입은 지켜집니다
다만,
보내는 데이터전체가 Content-Type: application/json; 이 되어서그런지
I/okhttp.OkHttpClient: <-- HTTP FAILED: java.net.SocketTimeoutException: timeout
E/AndroidRuntime: FATAL EXCEPTION: main
timeOut에러가 납니다.
그래서 OkHttpClient 에서 connectTimeout등, 연결시간을 1분까지 늘려보았지만
여전히 timeOut에러가 발생합니다.
어떤걸 더 참고해야할지 감이 안잡힙니다..ㅠㅠ
0
그렇군요.
@FormUrlEncoded 제거하고 @Body로 보내면 될 것 같습니다만 이것도 문제가 있으시다는 것이지요?
음.. 저는 두 방법 중 하나는 반드시 되었던 것으로 기억을 하는데. 무슨 문제일까요..
0
혹시 몰라 같은상황인 경우 찾아 첨부합니다
https://stackoverflow.com/questions/50024022/retrofit-transform-my-fields-int-in-string
0
어떤테스트를 말씀하시는지 정확히 모르겠지만,
포스트맨에서 요청값타입int로 설정하고 값 담아서 요청했을때 response잘 되었습니다.
클라에서 보낼때 로그로 타입이 Int라는것을 확인했는데
서버에서 클라에서 오는 타입을 확인하니 String이었습니다..
0
0
서버측에서는 값을 Int로받아야하는데 (서버에서 요청하는 bb의형태가 Int입니다)
제가 넘긴 값이 서버에서 String으로 찍힙니다.
Int로 보낸값이 String으로 바뀝니다..ㅜㅜ
0
혹시 서버 측에서 모든 값을 String으로 받는다거나 하지는 않을까요?
사용하고 계신 방법에 문제가 없습니다.
해당 서버에서 어떤 형태로 요청해야 하는지 가이드가 있을텐데 그것에 맞춰야 하는데 확인이 필요해 보입니다.