1
1
import com.icuxika.bittersweet.commons.net.request
2
- import kotlinx.serialization.EncodeDefault
3
- import kotlinx.serialization.ExperimentalSerializationApi
4
- import kotlinx.serialization.Serializable
5
- import kotlinx.serialization.encodeToString
2
+ import kotlinx.serialization.*
6
3
import kotlinx.serialization.json.Json
4
+ import java.net.URI
5
+ import java.net.http.HttpClient
6
+ import java.net.http.HttpRequest
7
+ import java.net.http.HttpResponse
8
+ import kotlin.reflect.typeOf
7
9
import kotlin.test.Test
10
+ import kotlin.test.assertTrue
8
11
9
12
class SerializationTest {
10
13
11
14
@Test
12
15
fun basic () {
13
16
val response = request<ApiData <String >>(" https://www.aprillie.com/go-transfer-station/getOne" )
14
17
println (response)
18
+ assertTrue(response.code == 10000 )
19
+
20
+ val responseK = requestK<ApiData <String >>(" https://www.aprillie.com/go-transfer-station/getOne" )
21
+ println (responseK)
22
+ assertTrue(response.code == 10000 )
15
23
16
24
val user = User (1L , " icuxika" )
17
25
val apiData = ApiData <User >(data = user)
@@ -21,9 +29,23 @@ class SerializationTest {
21
29
22
30
val apiDataObj = deserialize<ApiData <User >>(apiDataString)
23
31
println (apiDataObj)
32
+ assertTrue(apiDataObj.code == 10000 )
24
33
}
25
34
}
26
35
36
+ inline fun <reified T : Any > requestK (url : String ): T {
37
+ val serializer = serializer(typeOf<T >())
38
+ return executeK(serializer, url)
39
+ }
40
+
41
+ fun <T > executeK (serializer : KSerializer <Any ?>, url : String ): T {
42
+ val client = HttpClient .newBuilder().build();
43
+ val request = HttpRequest .newBuilder().uri(URI .create(url)).build()
44
+ val responseString = client.send(request, HttpResponse .BodyHandlers .ofString()).body()
45
+ @Suppress(" UNCHECKED_CAST" )
46
+ return Json .decodeFromString(serializer, responseString) as T
47
+ }
48
+
27
49
@OptIn(ExperimentalSerializationApi ::class )
28
50
@Serializable
29
51
data class ApiData <T >(
0 commit comments