IllegalArgumentException:无法为 class 创建 @Body 转换器
IllegalArgumentException: Unable to create @Body converter for class
每当我尝试使用 Retrofit 创建请求时,它都会失败。奇怪的是它以前有效,我没有对代码进行任何更改。现在几个月后它不再起作用了。我收到以下错误:IllegalArgumentException: Unable to create @Body converter for class apis.Config (parameter #2)
我尝试从 Gson 更改为 Moshi,但并没有解决问题。我还搜索了 Whosebug,发现人们遇到了类似的问题,但解决方案似乎对我不起作用,因为它们主要是关于重复的 SerializedNames,而在我的代码中并非如此。
API 服务
interface ApiService {
@Headers(
"Content-Type: application/json"
)
@POST("api")
fun getActivityInvite(@Path("voiceChannelId") voiceChannelId: String, @Body body: Config, @Header("Authorization") authorization: String): Call<ActivityInvite>
}
配置Class
data class Config(@SerializedName("target_application_id") val targetApplicationId: String){
@SerializedName("max_age")
val maxAge = 86400
@SerializedName("max_uses")
val maxUses = 0
@SerializedName("target_type")
val targetType = 2
@SerializedName("temporary")
val temporary = false
@SerializedName("validate")
val validate = null
}
API Class
class Api {
private val retrofit: Retrofit = Retrofit.Builder().baseUrl(BASE_URL).addConverterFactory(GsonConverterFactory.create()).build()
private val apiService: ApiService = retrofit.create(ApiService::class.java)
private val props: Properties = PropertiesUtil.getProperties("project.properties")
fun getActivityInvite(voiceId: String, activityId: String): String?{
val config = Config(activityId)
val request = apiService.getActivityInvite(voiceId, config, "Bot ${props.getProperty("bot_token")}")
val response = request.execute()
return response.body()?.getInviteUrl()
}
}
所以我找到了解决问题的方法。显然问题是由我使用 OpenJDK 16 某些带有反射的东西引起的。我通过在代码 运行 时使用 JVM 参数 --illegal-access=permit
解决了这个问题。该解决方案不是最佳解决方案,但有效。
每当我尝试使用 Retrofit 创建请求时,它都会失败。奇怪的是它以前有效,我没有对代码进行任何更改。现在几个月后它不再起作用了。我收到以下错误:IllegalArgumentException: Unable to create @Body converter for class apis.Config (parameter #2)
我尝试从 Gson 更改为 Moshi,但并没有解决问题。我还搜索了 Whosebug,发现人们遇到了类似的问题,但解决方案似乎对我不起作用,因为它们主要是关于重复的 SerializedNames,而在我的代码中并非如此。
API 服务
interface ApiService {
@Headers(
"Content-Type: application/json"
)
@POST("api")
fun getActivityInvite(@Path("voiceChannelId") voiceChannelId: String, @Body body: Config, @Header("Authorization") authorization: String): Call<ActivityInvite>
}
配置Class
data class Config(@SerializedName("target_application_id") val targetApplicationId: String){
@SerializedName("max_age")
val maxAge = 86400
@SerializedName("max_uses")
val maxUses = 0
@SerializedName("target_type")
val targetType = 2
@SerializedName("temporary")
val temporary = false
@SerializedName("validate")
val validate = null
}
API Class
class Api {
private val retrofit: Retrofit = Retrofit.Builder().baseUrl(BASE_URL).addConverterFactory(GsonConverterFactory.create()).build()
private val apiService: ApiService = retrofit.create(ApiService::class.java)
private val props: Properties = PropertiesUtil.getProperties("project.properties")
fun getActivityInvite(voiceId: String, activityId: String): String?{
val config = Config(activityId)
val request = apiService.getActivityInvite(voiceId, config, "Bot ${props.getProperty("bot_token")}")
val response = request.execute()
return response.body()?.getInviteUrl()
}
}
所以我找到了解决问题的方法。显然问题是由我使用 OpenJDK 16 某些带有反射的东西引起的。我通过在代码 运行 时使用 JVM 参数 --illegal-access=permit
解决了这个问题。该解决方案不是最佳解决方案,但有效。