diff --git a/helpers/codegen/__tests__/__snapshots__/codegen.spec.js.snap b/helpers/codegen/__tests__/__snapshots__/codegen.spec.js.snap index 6bb4d55b1..f84761c55 100644 --- a/helpers/codegen/__tests__/__snapshots__/codegen.spec.js.snap +++ b/helpers/codegen/__tests__/__snapshots__/codegen.spec.js.snap @@ -182,6 +182,60 @@ if err != nil { " `; +exports[`generate request for Java OkHTTP Client generate GET request 1`] = ` +"OkHttpClient client = new OkHttpClient().newBuilder().build(); +Request request = new Request.Builder() +.url(\\"https://httpbin.org/path/to?a=b\\") +.method(\\"GET\\", null) +.addHeader(\\"authorization\\", \\"Basic bW9ja1VzZXI6bW9ja1Bhc3N3b3Jk\\") + +.addHeader(\\"h1\\", \\"h1v\\") +.addHeader(\\"h2\\", \\"h2v\\") +.build(); +Response response = client.newCall(request).execute();" +`; + +exports[`generate request for Java OkHTTP Client generate POST request for JSON 1`] = ` +"OkHttpClient client = new OkHttpClient().newBuilder().build(); +MediaType mediaType = MediaType.parse(\\"application/json\\"); +RequestBody body = RequestBody.create(mediaType,\\"{\\\\\\"foo\\\\\\": \\\\\\"bar\\\\\\", \\\\\\"baz\\\\\\": \\\\\\"qux\\\\\\"}\\"); +Request request = new Request.Builder() +.url(\\"https://httpbin.org/path/to?a=b\\") +.method(\\"POST\\", body) +.addHeader(\\"authorization\\", \\"Bearer abcdefghijklmn\\" ) + +.addHeader(\\"h1\\", \\"h1v\\") +.addHeader(\\"h2\\", \\"h2v\\") +.build(); +Response response = client.newCall(request).execute();" +`; + +exports[`generate request for Java OkHTTP Client generate POST request for XML 1`] = ` +"OkHttpClient client = new OkHttpClient().newBuilder().build(); +MediaType mediaType = MediaType.parse(\\"application/xml\\"); +RequestBody body = RequestBody.create(mediaType,\\"\\\\n\\\\n \\\\n\\"); +Request request = new Request.Builder() +.url(\\"https://httpbin.org/path/to?a=b\\") +.method(\\"POST\\", body) +.addHeader(\\"authorization\\", \\"Bearer abcdefghijklmn\\" ) + +.addHeader(\\"h1\\", \\"h1v\\") +.addHeader(\\"h2\\", \\"h2v\\") +.build(); +Response response = client.newCall(request).execute();" +`; + +exports[`generate request for Java OkHTTP Client generate PUT request for www-form-urlencoded 1`] = ` +"OkHttpClient client = new OkHttpClient().newBuilder().build(); +MediaType mediaType = MediaType.parse(\\"application/x-www-form-urlencoded\\"); +RequestBody body = RequestBody.create(mediaType,\\"foo=bar&baz=qux\\"); +Request request = new Request.Builder() +.url(\\"https://httpbin.org/path/to?a=b\\") +.method(\\"PUT\\", body) +.build(); +Response response = client.newCall(request).execute();" +`; + exports[`generate request for JavaScript Axios generate GET request 1`] = ` "axios.get('https://httpbin.org/path/to?a=b',{ headers : { \\"h1\\": \\"h1v\\", diff --git a/helpers/codegen/codegen.js b/helpers/codegen/codegen.js index fce8ae969..9c0acbb0c 100644 --- a/helpers/codegen/codegen.js +++ b/helpers/codegen/codegen.js @@ -15,6 +15,7 @@ import { CsRestSharpCodegen } from "./generators/cs-restsharp" import { RubyNetHttpCodeGen } from "./generators/ruby-net-http" import { SalesforceApexCodegen } from "./generators/salesforce-apex" import { ShellHTTPie } from "./generators/shell-httpie" +import { JavaOkHttpClientCodegen } from "./generators/java-ok-http-client" /* Register code generators here. * A code generator is defined as an object with the following structure. @@ -28,6 +29,7 @@ export const codegens = [ CurlCodegen, CsRestSharpCodegen, GoNativeCodegen, + JavaOkHttpClientCodegen, JSAxiosCodegen, JSFetchCodegen, JSjQueryCodegen, diff --git a/helpers/codegen/generators/java-ok-http-client.js b/helpers/codegen/generators/java-ok-http-client.js new file mode 100644 index 000000000..ac62868f6 --- /dev/null +++ b/helpers/codegen/generators/java-ok-http-client.js @@ -0,0 +1,64 @@ +export const JavaOkHttpClientCodegen = { + id: "Java OkHTTP Client", + name: "Java OkHTTP Client", + generator: ({ + auth, + httpUser, + httpPassword, + method, + url, + pathName, + queryString, + bearerToken, + headers, + rawInput, + rawParams, + rawRequestBody, + contentType, + }) => { + const requestString = [] + + requestString.push("OkHttpClient client = new OkHttpClient().newBuilder().build();") + + if (["POST", "PUT", "PATCH", "DELETE"].includes(method)) { + let requestBody = rawInput ? rawParams : rawRequestBody + + if (contentType.includes("x-www-form-urlencoded")) { + requestBody = `"${requestBody}"` + } else requestBody = JSON.stringify(requestBody) + + requestString.push(`MediaType mediaType = MediaType.parse("${contentType}");`) + requestString.push(`RequestBody body = RequestBody.create(mediaType,${requestBody});`) + } + + requestString.push("Request request = new Request.Builder()") + requestString.push(`.url(\"${url}${pathName}${queryString}\")`) + + if (["POST", "PUT", "PATCH", "DELETE"].includes(method)) { + requestString.push(`.method(\"${method}\", body)`) + } else { + requestString.push(`.method(\"${method}\", null)`) + } + + if (auth === "Basic Auth") { + const basic = `${httpUser}:${httpPassword}` + requestString.push( + `.addHeader("authorization", "Basic ${window.btoa( + unescape(encodeURIComponent(basic)) + )}") \n` + ) + } else if (auth === "Bearer Token" || auth === "OAuth 2.0") { + requestString.push(`.addHeader("authorization", "Bearer ${bearerToken}" ) \n`) + } + + if (headers) { + headers.forEach(({ key, value }) => { + if (key) requestString.push(`.addHeader(\"${key}\", \"${value}\")`) + }) + } + + requestString.push(`.build();`) + requestString.push("Response response = client.newCall(request).execute();") + return requestString.join("\n") + }, +}