1
1
package contributors
2
2
3
- import com.fasterxml.jackson.annotation.JsonIgnoreProperties
4
- import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
5
- import io.reactivex.Flowable
6
- import io.reactivex.Single
7
- import io.reactivex.Observable
8
- // import com.jakewharton.retrofit2.adapter.kotlin.coroutines.CoroutineCallAdapterFactory
3
+ import com.jakewharton.retrofit2.converter.kotlinx.serialization.asConverterFactory
4
+ import kotlinx.serialization.ExperimentalSerializationApi
5
+ import kotlinx.serialization.Serializable
6
+ import kotlinx.serialization.json.Json
7
+ import okhttp3.MediaType.Companion.toMediaType
9
8
import okhttp3.OkHttpClient
10
9
import retrofit2.Call
11
10
import retrofit2.Response
12
11
import retrofit2.Retrofit
13
12
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory
14
- import retrofit2.converter.jackson.JacksonConverterFactory
15
13
import retrofit2.http.GET
16
14
import retrofit2.http.Path
17
- import java.util.*
15
+ import java.util.Base64
18
16
19
17
interface GitHubService {
20
18
@GET(" orgs/{org}/repos?per_page=100" )
@@ -29,24 +27,26 @@ interface GitHubService {
29
27
): Call <List <User >>
30
28
}
31
29
32
- @JsonIgnoreProperties(ignoreUnknown = true )
30
+ @Serializable
33
31
data class Repo (
34
32
val id : Long ,
35
33
val name : String
36
34
)
37
35
38
- @JsonIgnoreProperties(ignoreUnknown = true )
36
+ @Serializable
39
37
data class User (
40
38
val login : String ,
41
39
val contributions : Int
42
40
)
43
41
42
+ @Serializable
44
43
data class RequestData (
45
44
val username : String ,
46
45
val password : String ,
47
46
val org : String
48
47
)
49
48
49
+ @OptIn(ExperimentalSerializationApi ::class )
50
50
fun createGitHubService (username : String , password : String ): GitHubService {
51
51
val authToken = " Basic " + Base64 .getEncoder().encode(" $username :$password " .toByteArray()).toString(Charsets .UTF_8 )
52
52
val httpClient = OkHttpClient .Builder ()
@@ -60,9 +60,10 @@ fun createGitHubService(username: String, password: String): GitHubService {
60
60
}
61
61
.build()
62
62
63
+ val contentType = " application/json" .toMediaType()
63
64
val retrofit = Retrofit .Builder ()
64
65
.baseUrl(" https://api.github.com" )
65
- .addConverterFactory(JacksonConverterFactory .create(jacksonObjectMapper() ))
66
+ .addConverterFactory(Json { ignoreUnknownKeys = true }.asConverterFactory(contentType ))
66
67
.addCallAdapterFactory(RxJava2CallAdapterFactory .create())
67
68
.client(httpClient)
68
69
.build()
0 commit comments