In my Kotlin, Retrofit 2 project:
class TransportService {
// static analog
companion object {
@JvmStatic
fun checkoutSessions(bodyMap: Map<String, Any>, callback: Callback<Void>) {
val stripeMonitorRestClient = RestClientFactory.createRestClient(StripeRestClient::class.java!!)
val headerMap = mutableMapOf<String, String>()
headerMap["Accept"] = "application/json"
headerMap["Content-Type"] = "application/x-www-form-urlencoded"
headerMap["Stripe-Version"] = "2019-03-14; checkout_sessions_beta=v1"
headerMap["Authorization"] = "Bearer sk_test_4eC39HqLyjWDarjtT1zdp7dc"
val adMessagesList = stripeMonitorRestClient.checkoutSessions(headerMap, bodyMap) // error here
// asynchronously
adMessagesList.enqueue(callback)
}
}
}
And Rest client api:
import retrofit2.Call
import retrofit2.http.FieldMap
import retrofit2.http.HeaderMap
import retrofit2.http.POST
import retrofit2.http.FormUrlEncoded
interface StripeRestClient {
@FormUrlEncoded
@POST("checkout/sessions")
fun checkoutSessions(@HeaderMap headers: Map<String, String>, @FieldMap body: Map<String, Any>): Call<Void>
}
but I get runtime error
Exception in thread "main" java.lang.IllegalArgumentException: Parameter type must not include a type variable or wildcard: java.util.Map<java.lang.String, ?> (parameter #2)
in this line:
val adMessagesList = stripeMonitorRestClient.checkoutSessions(headerMap, bodyMap)
Here logs:
Hello, World! Current date(groovy) = Mon Apr 01 17:32:47 EEST 2019
Exception in thread "main" java.lang.IllegalArgumentException: Parameter type must not include a type variable or wildcard: java.util.Map<java.lang.String, ?> (parameter #2)
for method StripeRestClient.checkoutSessions
at retrofit2.Utils.methodError(Utils.java:52)
at retrofit2.Utils.methodError(Utils.java:42)
at retrofit2.Utils.parameterError(Utils.java:61)
at retrofit2.RequestFactory$Builder.validateResolvableType(RequestFactory.java:720)
at retrofit2.RequestFactory$Builder.parseParameterAnnotation(RequestFactory.java:551)
at retrofit2.RequestFactory$Builder.parseParameter(RequestFactory.java:295)
at retrofit2.RequestFactory$Builder.build(RequestFactory.java:182)
at retrofit2.RequestFactory.parseAnnotations(RequestFactory.java:65)
at retrofit2.ServiceMethod.parseAnnotations(ServiceMethod.java:25)
at retrofit2.Retrofit.loadServiceMethod(Retrofit.java:168)
at retrofit2.Retrofit$1.invoke(Retrofit.java:147)
at com.sun.proxy.$Proxy0.checkoutSessions(Unknown Source)
at myproject.service.TransportService$Companion.checkoutSessions(TransportService.kt:19)
at myproject.MainKt.main(Main.kt:14)
Just use @JvmSuppressWildcards annotation before your interface method -
Like -
@POST("add_new_purchase.php")
@JvmSuppressWildcards
fun addNewPurchase(@Body purchaseList: List<PurchaseModel>): Call< BaseResponse>
I encountered the same problem when started migration to Kotlin. If StripeRestClient
is in Java the call would work.
Try to convert interface to Java.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With