Browse Source

fix FileNotFoundException when response code is 4xx or 5xx

stevenzack 4 years ago
parent
commit
701208b6f4
1 changed files with 23 additions and 17 deletions
  1. 23 17
      tools/goctl/api/ktgen/gen.go

+ 23 - 17
tools/goctl/api/ktgen/gen.go

@@ -26,9 +26,9 @@ import java.net.URL
 const val SERVER = "http://localhost:8080"
 const val SERVER = "http://localhost:8080"
 
 
 suspend fun apiRequest(
 suspend fun apiRequest(
-    method:String,
+    method: String,
     uri: String,
     uri: String,
-    body: Any="",
+    body: Any = "",
     onOk: ((String) -> Unit)? = null,
     onOk: ((String) -> Unit)? = null,
     onFail: ((String) -> Unit)? = null,
     onFail: ((String) -> Unit)? = null,
     eventually: (() -> Unit)? = null
     eventually: (() -> Unit)? = null
@@ -36,27 +36,33 @@ suspend fun apiRequest(
     val url = URL(SERVER + uri)
     val url = URL(SERVER + uri)
     with(url.openConnection() as HttpURLConnection) {
     with(url.openConnection() as HttpURLConnection) {
         requestMethod = method
         requestMethod = method
-        headerFields["Content-Type"] = listOf("Application/json")
-        val data = when (body) {
-            is String -> {
-                body
+        doInput = true
+        if (method == "POST" || method == "PUT") {
+            setRequestProperty("Content-Type", "application/json")
+            doOutput = true
+            val data = when (body) {
+                is String -> {
+                    body
+                }
+                else -> {
+                    Gson().toJson(body)
+                }
             }
             }
-            else -> {
-                Gson().toJson(body)
+            val wr = OutputStreamWriter(outputStream)
+            wr.write(data)
+            wr.flush()
+        }
+        if (responseCode >= 400) {
+            BufferedReader(InputStreamReader(errorStream)).use {
+                val response = it.readText()
+                onFail?.invoke(response)
             }
             }
+            return@with
         }
         }
-        val wr = OutputStreamWriter(outputStream)
-        wr.write(data)
-        wr.flush()
-
         //response
         //response
         BufferedReader(InputStreamReader(inputStream)).use {
         BufferedReader(InputStreamReader(inputStream)).use {
             val response = it.readText()
             val response = it.readText()
-            if (responseCode == 200) {
-                onOk?.invoke(response)
-            } else {
-                onFail?.invoke(response)
-            }
+            onOk?.invoke(response)
         }
         }
     }
     }
     eventually?.invoke()
     eventually?.invoke()