diff --git a/tools/goctl/api/gogen/genroutes.go b/tools/goctl/api/gogen/genroutes.go index b52f2e06..a643dc4f 100644 --- a/tools/goctl/api/gogen/genroutes.go +++ b/tools/goctl/api/gogen/genroutes.go @@ -43,6 +43,7 @@ var mapping = map[string]string{ "head": "http.MethodHead", "post": "http.MethodPost", "put": "http.MethodPut", + "patch": "http.MethodPatch", } type ( diff --git a/tools/goctl/api/ktgen/funcs.go b/tools/goctl/api/ktgen/funcs.go index 84060dd3..d24642c1 100644 --- a/tools/goctl/api/ktgen/funcs.go +++ b/tools/goctl/api/ktgen/funcs.go @@ -5,15 +5,16 @@ import ( "strings" "text/template" + "github.com/iancoleman/strcase" "github.com/tal-tech/go-zero/tools/goctl/api/util" ) var funcsMap = template.FuncMap{ - "lowCamelCase": lowCamelCase, - "pathToFuncName": pathToFuncName, - "parseType": parseType, - "add": add, - "upperCase": upperCase, + "lowCamelCase": lowCamelCase, + "routeToFuncName": routeToFuncName, + "parseType": parseType, + "add": add, + "upperCase": upperCase, } func lowCamelCase(s string) string { @@ -24,16 +25,16 @@ func lowCamelCase(s string) string { return util.ToLower(s[:1]) + s[1:] } -func pathToFuncName(path string) string { +func routeToFuncName(method, path string) string { if !strings.HasPrefix(path, "/") { path = "/" + path } path = strings.ReplaceAll(path, "/", "_") path = strings.ReplaceAll(path, "-", "_") + path = strings.ReplaceAll(path, ":", "With_") - camel := util.ToCamelCase(path) - return util.ToLower(camel[:1]) + camel[1:] + return strings.ToLower(method)+strcase.ToCamel(path) } func parseType(t string) string { diff --git a/tools/goctl/api/ktgen/gen.go b/tools/goctl/api/ktgen/gen.go index 8e4d2f19..40d08543 100644 --- a/tools/goctl/api/ktgen/gen.go +++ b/tools/goctl/api/ktgen/gen.go @@ -34,9 +34,10 @@ suspend fun apiRequest( ) = withContext(Dispatchers.IO) { val url = URL(SERVER + uri) with(url.openConnection() as HttpURLConnection) { + connectTimeout = 3000 requestMethod = method doInput = true - if (method == "POST" || method == "PUT") { + if (method == "POST" || method == "PUT" || method == "PATCH") { setRequestProperty("Content-Type", "application/json") doOutput = true val data = when (body) { @@ -51,17 +52,22 @@ suspend fun apiRequest( wr.write(data) wr.flush() } - if (responseCode >= 400) { - BufferedReader(InputStreamReader(errorStream)).use { + + try { + if (responseCode >= 400) { + BufferedReader(InputStreamReader(errorStream)).use { + val response = it.readText() + onFail?.invoke(response) + } + return@with + } + //response + BufferedReader(InputStreamReader(inputStream)).use { val response = it.readText() - onFail?.invoke(response) + onOk?.invoke(response) } - return@with - } - //response - BufferedReader(InputStreamReader(inputStream)).use { - val response = it.readText() - onOk?.invoke(response) + } catch (e: Exception) { + e.message?.let { onFail?.invoke(it) } } } eventually?.invoke() @@ -77,7 +83,7 @@ object {{with .Info}}{{.Title}}{{end}}{ val {{with $item}}{{lowCamelCase .Name}}: {{parseType .Type}}{{end}}{{if ne $i (add $length -1)}},{{end}}{{end}} ){{end}} {{with .Service}} - {{range .Routes}}suspend fun {{pathToFuncName .Path}}({{with .RequestType}}{{if ne .Name ""}} + {{range .Routes}}suspend fun {{routeToFuncName .Method .Path}}({{with .RequestType}}{{if ne .Name ""}} req:{{.Name}},{{end}}{{end}} onOk: (({{with .ResponseType}}{{.Name}}{{end}}) -> Unit)? = null, onFail: ((String) -> Unit)? = null,