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
'source' 카테고리의 다른 글
순간의 언어를 변경하려면 어떻게 해야 합니까? (0) | 2023.01.15 |
---|---|
JVM은 테일콜 최적화를 방해합니까? (0) | 2023.01.15 |
PDO 연결 닫기 (0) | 2023.01.15 |
GROUP BY 및 ORDER BY를 사용한 MySQL 및 MariaDB의 다른 결과 세트 (0) | 2023.01.09 |
MySql에서 잘못된 조합 오류입니다. (0) | 2023.01.09 |