source

Okhttp3 - RequestBody.create(contentType, content)가 폐지되었습니다.

factcode 2023. 1. 15. 17:13
반응형

Okhttp3 - RequestBody.create(contentType, content)가 폐지되었습니다.

나는 폐지 방법을 대체하는 예를 찾을 수 없었다.okhttp3 메인 페이지의 예는 오래된 것입니다.다음 중 하나입니다.

public static final MediaType JSON = MediaType.get("application/json; charset=utf-8");

OkHttpClient client = new OkHttpClient();

String post(String url, String json) throws IOException {
    RequestBody body = RequestBody.create(JSON, json);
      Request request = new Request.Builder()
          .url(url)
          .post(body)
          .build();
  try (Response response = client.newCall(request).execute()) {
    return response.body().string();
  }
}

누군가 해결해 주시면 감사하겠습니다.

업데이트: 'com'을 사용하고 있습니다.squareup.okhttp3:okhttp:4.0.1'

Java 솔루션:사용하다create(String, MediaType)대신create(MediaType, String)예를들면

Kotlin 솔루션:확장 기능 사용content.toRequestBody(contentType); 파일 타입의 경우file.asRequestBody(contentType)

참고: Kotlin을 사용하고 있지만 IDE가 다음과 같은 클래스나 메서드를 자동으로 Import하지 않습니다.import okhttp3.RequestBody.Companion.toRequestBody, 그래서 수동으로 Import 합니다...그리고 그것을 Saed Yunus와 Pratyesh가 아래에 제시한 예시로 사용한다.

자세한 사항은 이쪽:문서

(Android Studio 또는 Jetbrain의 IDE에서 권장되지 않는 메서드 또는 클래스에 대한 솔루션은 Ctrl 키를 누른 상태에서create(...)RequestBody.create)

in com.squareup.okhttp3:okhttp:4.1.0

MediaType.get("application/json; charset=utf-8")더 이상 이용할 수 없습니다.

대신 우리는 이것을 사용할 필요가 있다."application/json; charset=utf-8".toMediaTypeOrNull().

예를 들어 요청 본문을 지금 작성해야 하는 경우okhttp:4.1.0

import okhttp3.MediaType.Companion.toMediaTypeOrNull
import okhttp3.RequestBody.Companion.toRequestBody

    val jsonObject = JSONObject()
        jsonObject.put("name", "Ancd test")
        jsonObject.put("city", "delhi")
        jsonObject.put("age", "23")
    val body = jsonObject.toString().toRequestBody("application/json; charset=utf-8".toMediaTypeOrNull())

어디서 답이 나올지 궁금해 하시는 분들께!

모든 대안/솔루션(답변에서 설명한 바와 같이)은 해당 폐지된 코드에 기재되어 있습니다.IDE가 지원하는 방법을 사용하여 이 코드(사용되지 않는 코드)로 이동합니다.를 들어, 사용되지 않는 코드의 대체/솔루션을 확인하려면RequestBody.create(...,...)Android Studio 또는 Jetbrain의 IDE를 사용할 때는 길게 누르기만 하면 됩니다.Ctrl그 위를 맴돌다RequestBody.create(...,...)그 다음에, 정상적으로 정지하면 클릭해 주세요.

Android Studio의 버그일 수 있습니다.권장되지는 않지만 이는 Okhttp 4.2.2에서 작동합니다.

import okhttp3.MediaType.Companion.toMediaTypeOrNull
import okhttp3.RequestBody.Companion.asRequestBody

로서 사용하다

val file = File("path")
file.asRequestBody("image/jpeg".toMediaTypeOrNull())

okhttp3 버전 4.0.0 이후 폐지되었습니다.

그 버전의 문서에는

@JvmStatic
    @Deprecated(
        message = "Moved to extension function. Put the 'content' argument first to fix Java",
        replaceWith = ReplaceWith(
            expression = "content.toRequestBody(contentType)",
            imports = ["okhttp3.RequestBody.Companion.toRequestBody"]
        ),
        level = DeprecationLevel.WARNING)
    fun create(contentType: MediaType?, content: String) = content.toRequestBody(contentType)

해보지는 않았지만, 나는 당신이 다음 일을 함으로써 잘해야 한다고 생각합니다.

package com.example;

import java.io.IOException;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;

public class Test {

  public static final MediaType JSON = MediaType.get("application/json; charset=utf-8");


  OkHttpClient client = new OkHttpClient();

  public static void main(String[] args) {

  }

  String post(String url, String json) throws IOException {
    //RequestBody body = RequestBody.create(JSON, json);
    RequestBody body = RequestBody.Companion.create(json, JSON);

    Request request = new Request.Builder()
        .url(url)
        .post(body)
        .build();
    try (Response response = client.newCall(request).execute()) {
      return response.body().string();
    }
  }

}

업데이트: 아래 종속 버전을 사용하여 위에 표시된 파일을 컴파일하려고 했습니다.RequestBody.Companion.create(json, JSON)별로 추천되지 않는 것 같아요

<dependency>
    <groupId>com.squareup.okhttp3</groupId>
    <artifactId>okhttp</artifactId>
    <version>4.0.0</version>
</dependency>

그냥 바꿔요ResponseBody.create(MediaType.parse("text/json"), plainBody.trim())로.ResponseBody.create(plainBody.trim(),MediaType.parse("text/json"))

그렇게 업데이트 할 수 있나요?

val apiRequest = RequestBody.create(MediaType.parse("text/plain;charset=utf-8"), "edit_group")
val tokenRequest = RequestBody.create(MediaType.parse("text/plain;charset=utf-8"), token)
val fileReqBody = RequestBody.create(MediaType.parse("image/*"), file)

로.

val apiRequest = "edit_group".toRequestBody("text/plain;charset=utf-8".toMediaType())
val tokenRequest = token.toRequestBody("text/plain;charset=utf-8".toMediaType())
val file = File(path)
val fileReqBody = file.asRequestBody("image/*".toMediaType())

매뉴얼을 대충 훑어보았습니다.권장되지 않는 것으로 표시되지만 대체 방법은 문서에 나와 있습니다.
json.toRequestBody(contentType)가 이 기능을 수행합니다.
문서 링크는 다음과 같습니다.
https://github.com/square/okhttp/blob/master/okhttp/src/main/java/okhttp3/RequestBody.kthttpsgithub.com/square/okhttp/blob/master/okhttp/src/main/java/okhttp3/.kt

public static final MediaType JSON = MediaType.get("application/json; charset=utf-8");

OkHttpClient client = new OkHttpClient();

String post(String url, String json) throws IOException {
    RequestBody body = RequestBody.Companion.create(json, JSON)
      Request request = new Request.Builder()
          .url(url)
          .post(body)
          .build();
  try (Response response = client.newCall(request).execute()) {
    return response.body().string();
  }
}

그냥 발뺌만 하면 돼

@sysloglin.jvm.JvmStatic @kotlin.사용되지 않는 공개 최종 재미 만들기(콘텐츠)okhttp3 라고 입력합니다.Media Type?, 파일: java.io파일): okhttp3.Request Body { }

    @kotlin.jvm.JvmStatic @kotlin.Deprecated @kotlin.jvm.JvmOverloads public final fun create(contentType: okhttp3.MediaType?, content: kotlin.ByteArray, offset: kotlin.Int , byteCount: kotlin.Int): okhttp3.RequestBody {}

    @kotlin.jvm.JvmStatic @kotlin.Deprecated public final fun create(contentType: okhttp3.MediaType?, content: kotlin.String): okhttp3.RequestBody {}

    @kotlin.jvm.JvmStatic @kotlin.Deprecated public final fun create(contentType: okhttp3.MediaType?, content: okio.ByteString): okhttp3.RequestBody { }

okhttp 4에 따르면 공식 문서로서 많은 것이 업데이트 되었습니다.

RequestBody.create()가 File.asRequestBody()로 업그레이드됩니다.

언급URL : https://stackoverflow.com/questions/57100451/okhttp3-requestbody-createcontenttype-content-deprecated

반응형