Retrofit 2를 사용하여 원시 JSON 게시

Aug 17 2020

다른 응용 프로그램에서받은 큰 JSON 개체가 있고 Retrofit 2를 사용하여 API에 대한 포스트 호출을해야합니다.이 항목에서 찾은 모든 예제 또는 항목은 JSONObject 또는 맵을 사용합니다. 즉, JSONObject 또는 Map을 생성하려면 내 문자열 (JSON)을 구문 분석해야합니다.

그러나 나는 어떻게 든 몸에 내 끈을 직접 넣고 싶습니다.

이 방법으로 시도했지만 작동하지 않습니다.

@Headers("Content-Type: application/json")
@POST("transactions")
Call<Void> submitTransaction(@Body String body);

나는 몸으로 탈출하여 내 JSON 이상한 보인다되는 문자열을 보낸다이 방법 : 스크린 샷

답변

1 Nemanja Aug 17 2020 at 22:07

Gradle 종속성 목록에 Scalars Converter를 추가해야합니다. 그러면 Retrofit은 기본적으로 Gson 변환기를 사용하기 때문에 java.lang.String 개체를 텍스트 / 일반 요청 본문으로 변환하는 작업을 처리합니다. 이 링크에서 최신 버전을 확인하십시오.

https://search.maven.org/search?q=g:com.squareup.retrofit2%20a:converter-scalars

dependencies {
    implementation “com.squareup.retrofit2:converter-scalars:2.4.0”
    ..
}

그런 다음 올바른 변환기 팩토리를 Retrofit 빌더에 전달해야합니다. 나중에 서비스에 전달 된 @Body 매개 변수를 변환하는 방법을 Retrofit에 알려줍니다.

val retrofit = Retrofit.Builder()
        .client(okHttpClient)
        .baseUrl("/")
        .addConverterFactory(ScalarsConverterFactory.create())
        .build()

그런 다음 String body 매개 변수로 Retrofit 서비스를 설정할 때입니다.

@Headers("Content-Type: application/json")
@POST("transactions")
Call<Void> submitTransaction(@Body String body);