forked from loafle/openapi-generator-original
[dart-dio] Adds support for multipart form data post body (#4797)
* [dart-dio] Adds support for multipart form data post body * [dart-dio] Fixes issues around formData
This commit is contained in:
parent
d643b2706a
commit
39ba6bbfb1
@ -232,6 +232,8 @@ public class DartDioClientCodegen extends DartClientCodegen {
|
|||||||
supportingFiles.add(new SupportingFile("pubspec.mustache", "", "pubspec.yaml"));
|
supportingFiles.add(new SupportingFile("pubspec.mustache", "", "pubspec.yaml"));
|
||||||
supportingFiles.add(new SupportingFile("analysis_options.mustache", "", "analysis_options.yaml"));
|
supportingFiles.add(new SupportingFile("analysis_options.mustache", "", "analysis_options.yaml"));
|
||||||
supportingFiles.add(new SupportingFile("apilib.mustache", libFolder, "api.dart"));
|
supportingFiles.add(new SupportingFile("apilib.mustache", libFolder, "api.dart"));
|
||||||
|
supportingFiles.add(new SupportingFile("api_util.mustache", libFolder, "api_util.dart"));
|
||||||
|
|
||||||
supportingFiles.add(new SupportingFile("serializers.mustache", libFolder, "serializers.dart"));
|
supportingFiles.add(new SupportingFile("serializers.mustache", libFolder, "serializers.dart"));
|
||||||
|
|
||||||
supportingFiles.add(new SupportingFile("gitignore.mustache", "", ".gitignore"));
|
supportingFiles.add(new SupportingFile("gitignore.mustache", "", ".gitignore"));
|
||||||
@ -346,6 +348,10 @@ public class DartDioClientCodegen extends DartClientCodegen {
|
|||||||
op.vendorExtensions.put("isForm", isForm);
|
op.vendorExtensions.put("isForm", isForm);
|
||||||
op.vendorExtensions.put("isMultipart", isMultipart);
|
op.vendorExtensions.put("isMultipart", isMultipart);
|
||||||
|
|
||||||
|
if (op.getHasFormParams()) {
|
||||||
|
fullImports.add("package:" + pubName + "/api_util.dart");
|
||||||
|
}
|
||||||
|
|
||||||
Set<String> imports = new HashSet<>();
|
Set<String> imports = new HashSet<>();
|
||||||
for (String item : op.imports) {
|
for (String item : op.imports) {
|
||||||
if (!modelToIgnore.contains(item.toLowerCase(Locale.ROOT))) {
|
if (!modelToIgnore.contains(item.toLowerCase(Locale.ROOT))) {
|
||||||
@ -356,6 +362,7 @@ public class DartDioClientCodegen extends DartClientCodegen {
|
|||||||
}
|
}
|
||||||
modelImports.addAll(imports);
|
modelImports.addAll(imports);
|
||||||
op.imports = imports;
|
op.imports = imports;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
objs.put("modelImports", modelImports);
|
objs.put("modelImports", modelImports);
|
||||||
|
@ -25,10 +25,9 @@ class {{classname}} {
|
|||||||
|
|
||||||
String path = "{{{path}}}"{{#pathParams}}.replaceAll("{" + "{{baseName}}" + "}", {{{paramName}}}.toString()){{/pathParams}};
|
String path = "{{{path}}}"{{#pathParams}}.replaceAll("{" + "{{baseName}}" + "}", {{{paramName}}}.toString()){{/pathParams}};
|
||||||
|
|
||||||
// query params
|
Map<String, dynamic> queryParams = {};
|
||||||
Map<String, dynamic> queryParams = {};
|
Map<String, String> headerParams = Map.from(headers ?? {});
|
||||||
Map<String, String> headerParams = Map.from(headers ?? {});
|
dynamic bodyData;
|
||||||
Map<String, String> formParams = {};
|
|
||||||
|
|
||||||
{{#headerParams}}
|
{{#headerParams}}
|
||||||
headerParams["{{baseName}}"] = {{paramName}};
|
headerParams["{{baseName}}"] = {{paramName}};
|
||||||
@ -36,12 +35,29 @@ class {{classname}} {
|
|||||||
{{#queryParams}}
|
{{#queryParams}}
|
||||||
queryParams["{{baseName}}"] = {{paramName}};
|
queryParams["{{baseName}}"] = {{paramName}};
|
||||||
{{/queryParams}}
|
{{/queryParams}}
|
||||||
queryParams.removeWhere((key, value) => value == null);
|
queryParams.removeWhere((key, value) => value == null);
|
||||||
headerParams.removeWhere((key, value) => value == null);
|
headerParams.removeWhere((key, value) => value == null);
|
||||||
formParams.removeWhere((key, value) => value == null);
|
|
||||||
|
|
||||||
List<String> contentTypes = [{{#consumes}}
|
List<String> contentTypes = [{{#consumes}}"{{{mediaType}}}"{{#hasMore}},{{/hasMore}}{{/consumes}}];
|
||||||
"{{{mediaType}}}"{{#hasMore}},{{/hasMore}}{{/consumes}}];
|
|
||||||
|
{{#hasFormParams}}
|
||||||
|
Map<String, dynamic> formData = {};
|
||||||
|
{{#formParams}}
|
||||||
|
{{#isMultipart}}
|
||||||
|
{{^isFile}}
|
||||||
|
if ({{paramName}} != null) {
|
||||||
|
formData['{{baseName}}'] = parameterToString({{paramName}});
|
||||||
|
}
|
||||||
|
{{/isFile}}
|
||||||
|
{{#isFile}}
|
||||||
|
if ({{paramName}} != null) {
|
||||||
|
formData['{{baseName}}'] = MultipartFile.fromBytes({{paramName}}, filename: "{{baseName}}");
|
||||||
|
}
|
||||||
|
{{/isFile}}
|
||||||
|
{{/isMultipart}}
|
||||||
|
{{/formParams}}
|
||||||
|
bodyData = FormData.fromMap(formData);
|
||||||
|
{{/hasFormParams}}
|
||||||
|
|
||||||
{{#bodyParam}}
|
{{#bodyParam}}
|
||||||
{{#isListContainer}}
|
{{#isListContainer}}
|
||||||
@ -52,14 +68,13 @@ class {{classname}} {
|
|||||||
var serializedBody = _serializers.serialize({{paramName}});
|
var serializedBody = _serializers.serialize({{paramName}});
|
||||||
{{/isListContainer}}
|
{{/isListContainer}}
|
||||||
var json{{paramName}} = json.encode(serializedBody);
|
var json{{paramName}} = json.encode(serializedBody);
|
||||||
|
bodyData = json{{paramName}};
|
||||||
{{/bodyParam}}
|
{{/bodyParam}}
|
||||||
|
|
||||||
return _dio.request(
|
return _dio.request(
|
||||||
path,
|
path,
|
||||||
queryParameters: queryParams,
|
queryParameters: queryParams,
|
||||||
{{#bodyParam}}
|
data: bodyData,
|
||||||
data: json{{paramName}},
|
|
||||||
{{/bodyParam}}
|
|
||||||
options: Options(
|
options: Options(
|
||||||
method: '{{httpMethod}}'.toUpperCase(),
|
method: '{{httpMethod}}'.toUpperCase(),
|
||||||
headers: headerParams,
|
headers: headerParams,
|
||||||
|
18
modules/openapi-generator/src/main/resources/dart-dio/api_util.mustache
vendored
Normal file
18
modules/openapi-generator/src/main/resources/dart-dio/api_util.mustache
vendored
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
/// Format the given parameter object into string.
|
||||||
|
String parameterToString(dynamic value) {
|
||||||
|
if (value == null) {
|
||||||
|
return '';
|
||||||
|
} else if (value is DateTime) {
|
||||||
|
return value.toUtc().toIso8601String();
|
||||||
|
{{#models}}
|
||||||
|
{{#model}}
|
||||||
|
{{#isEnum}}
|
||||||
|
} else if (value is {{classname}}) {
|
||||||
|
return {{classname}}TypeTransformer().encode(value).toString();
|
||||||
|
{{/isEnum}}
|
||||||
|
{{/model}}
|
||||||
|
{{/models}}
|
||||||
|
} else {
|
||||||
|
return value.toString();
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user