From b3e62d6b323d3732b1f703237e1318773838357d Mon Sep 17 00:00:00 2001 From: Aditya Mayukh Som <adityamayukhsom@gmail.com> Date: Sun, 24 Mar 2024 18:53:29 +0530 Subject: [PATCH] updated header and query support --- lib/codegen/java/async_http_client.dart | 54 ++++++++++++++++--------- 1 file changed, 36 insertions(+), 18 deletions(-) diff --git a/lib/codegen/java/async_http_client.dart b/lib/codegen/java/async_http_client.dart index 6f092f4b..51f0c64b 100644 --- a/lib/codegen/java/async_http_client.dart +++ b/lib/codegen/java/async_http_client.dart @@ -173,33 +173,51 @@ public class Main { templateRequestCreation.render({"method": method.name.toUpperCase()}); // setting up query parameters - if (uri.hasQuery) { - var params = uri.queryParameters; + var params = uri.queryParameters; + if (params.isNotEmpty) { var templateUrlQueryParam = jj.Template(kTemplateUrlQueryParam); - params.forEach((name, value) { - result += - templateUrlQueryParam.render({"name": name, "value": value}); - }); + result += templateUrlQueryParam.render({"queryParams": params}); } - result = kTemplateStart + result; - - var contentType = requestModel.requestBodyContentType.header; - var templateRequestHeader = jj.Template(kTemplateRequestHeader); + var headers = <String, String>{}; + for (var i in harJson["headers"]) { + headers[i["name"]] = i["value"]; + } // especially sets up Content-Type header if the request has a body // and Content-Type is not explicitely set by the developer - if (hasBody && - !requestModel.enabledHeadersMap.containsKey('Content-Type')) { - result += templateRequestHeader - .render({"name": 'Content-Type', "value": contentType}); + if (requestModel.hasBody && !headers.containsKey("Content-Type")) { + headers["Content-Type"] = requestModel.requestBodyContentType.header; + } + + if (requestModel.hasBody && + requestModel.hasFormData && + !requestModel.hasFileInFormData) { + headers["Content-Type"] = "application/x-www-form-urlencoded"; + } + + // we will use this request boundary to set boundary if multipart formdata is used + // String requestBoundary = ""; + String multipartTypePrefix = "multipart/form-data; boundary="; + if (headers.containsKey("Content-Type") && + headers["Content-Type"]!.startsWith(RegExp(multipartTypePrefix))) { + // String tmp = headers["Content-Type"]!; + // requestBoundary = tmp.substring(multipartTypePrefix.length); + + // if a boundary is provided, we will use that as the default boundary + if (boundary != null) { + // requestBoundary = boundary; + headers["Content-Type"] = multipartTypePrefix + boundary; + } } // setting up rest of the request headers - var headers = requestModel.enabledHeadersMap; - headers.forEach((name, value) { - result += templateRequestHeader.render({"name": name, "value": value}); - }); + if (headers.isNotEmpty) { + var templateRequestHeader = jj.Template(kTemplateRequestHeader); + result += templateRequestHeader.render({ + "headers": headers // + }); + } // handling form data if (requestModel.hasFormData &&