From dabe6b5961c05afee49c8db1aa99d2e41d632f78 Mon Sep 17 00:00:00 2001 From: ToreJohansson Date: Sat, 19 Aug 2017 06:07:40 +0200 Subject: [PATCH] Added examples for body parameter (#6228) --- .../io/swagger/codegen/CodegenOperation.java | 1 + .../io/swagger/codegen/DefaultCodegen.java | 4 ++ .../codegen/examples/ExampleGenerator.java | 49 ++++++++++++++++++- 3 files changed, 53 insertions(+), 1 deletion(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenOperation.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenOperation.java index a5fd7ebc7e89..1273b96c5c29 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenOperation.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenOperation.java @@ -33,6 +33,7 @@ public class CodegenOperation { public List responses = new ArrayList(); public Set imports = new HashSet(); public List> examples; + public List> requestBodyExamples; public ExternalDocs externalDocs; public Map vendorExtensions; public String nickname; // legacy support diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java index b09bdadedc69..1ebd8d116f35 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java @@ -2278,6 +2278,10 @@ public class DefaultCodegen { } else if (param instanceof BodyParameter) { bodyParam = p; bodyParams.add(p.copy()); + if(definitions != null) + { + op.requestBodyExamples = new ExampleGenerator(definitions).generate(null, operation.getConsumes(), bodyParam.dataType); + } } else if (param instanceof FormParameter) { formParams.add(p.copy()); } diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/examples/ExampleGenerator.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/examples/ExampleGenerator.java index eb111591f009..0ab60e5befa5 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/examples/ExampleGenerator.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/examples/ExampleGenerator.java @@ -76,6 +76,53 @@ public class ExampleGenerator { return output; } + public List> generate(Map examples, List mediaTypes, String modelName) { + List> output = new ArrayList<>(); + Set processedModels = new HashSet<>(); + if (examples == null) { + if (mediaTypes == null) { + // assume application/json for this + mediaTypes = Collections.singletonList(MIME_TYPE_JSON); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'. + } + for (String mediaType : mediaTypes) { + Map kv = new HashMap<>(); + kv.put(CONTENT_TYPE, mediaType); + if (modelName != null && mediaType.startsWith(MIME_TYPE_JSON)) { + final Model model = this.examples.get(modelName); + if (model != null) { + + String example = Json.pretty(resolveModelToExample(modelName, mediaType, model, processedModels)); + + if (example != null) { + kv.put(EXAMPLE, example); + output.add(kv); + } + } + } else if (modelName != null && mediaType.startsWith(MIME_TYPE_XML)) { + final Model model = this.examples.get(modelName); + String example = new XmlExampleGenerator(this.examples).toXml(model, 0, Collections.emptySet()); + if (example != null) { + kv.put(EXAMPLE, example); + output.add(kv); + } + } + } + } else { + for (Map.Entry entry : examples.entrySet()) { + final Map kv = new HashMap<>(); + kv.put(CONTENT_TYPE, entry.getKey()); + kv.put(EXAMPLE, Json.pretty(entry.getValue())); + output.add(kv); + } + } + if (output.size() == 0) { + Map kv = new HashMap<>(); + kv.put(OUTPUT, NONE); + output.add(kv); + } + return output; + } + private Object resolvePropertyToExample(String propertyName, String mediaType, Property property, Set processedModels) { logger.debug("Resolving example for property {}...", property); if (property.getExample() != null) { @@ -209,4 +256,4 @@ public class ExampleGenerator { } return ""; } -} \ No newline at end of file +}