Skip to content

Commit 4e11031

Browse files
fix: treat number example as number and not string
1 parent 6143bee commit 4e11031

2 files changed

Lines changed: 58 additions & 2 deletions

File tree

modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -917,7 +917,7 @@ private static void setExampleSchema(io.swagger.v3.oas.annotations.media.Schema
917917
// Only parse "null" as null value when nullable=true
918918
if (node.isNull() && schema.nullable()) {
919919
schemaObject.setExample(null);
920-
} else if (node.isObject() || node.isArray()) {
920+
} else if (node.isObject() || node.isArray() || SchemaTypeUtils.isNumberSchema(schemaObject)) {
921921
schemaObject.setExample(node);
922922
} else {
923923
schemaObject.setExample(exampleValue);
@@ -983,7 +983,12 @@ public static Schema resolveSchemaFromType(Class<?> schemaImplementation, Compon
983983
public static Schema resolveSchemaFromType(Class<?> schemaImplementation, Components components, JsonView jsonViewAnnotation, boolean openapi31) {
984984
return resolveSchemaFromType(schemaImplementation, components, jsonViewAnnotation, openapi31, null, null, null);
985985
}
986-
public static Schema resolveSchemaFromType(Class<?> schemaImplementation, Components components, JsonView jsonViewAnnotation, boolean openapi31, io.swagger.v3.oas.annotations.media.Schema schemaAnnotation, io.swagger.v3.oas.annotations.media.ArraySchema arrayAnnotation, ModelConverterContext context) {
986+
public static Schema resolveSchemaFromType(Class<?> schemaImplementation,
987+
Components components,
988+
JsonView jsonViewAnnotation,
989+
boolean openapi31,
990+
io.swagger.v3.oas.annotations.media.Schema schemaAnnotation,
991+
io.swagger.v3.oas.annotations.media.ArraySchema arrayAnnotation, ModelConverterContext context) {
987992
Schema schemaObject;
988993
PrimitiveType primitiveType = PrimitiveType.fromType(schemaImplementation);
989994
if (primitiveType != null) {

modules/swagger-core/src/test/java/io/swagger/v3/core/util/AnnotationsUtilsTest.java

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package io.swagger.v3.core.util;
22

3+
import com.fasterxml.jackson.databind.node.IntNode;
34
import com.google.common.collect.ImmutableMap;
45
import io.swagger.v3.oas.annotations.media.Content;
56
import io.swagger.v3.oas.annotations.responses.ApiResponse;
@@ -102,6 +103,12 @@ class DummyClass implements Serializable {}
102103
static class ExampleHolder {
103104
@io.swagger.v3.oas.annotations.media.Schema(type = "string", example = "5 lacs per annum")
104105
String value;
106+
107+
@io.swagger.v3.oas.annotations.media.Schema(type = "number", example = "10")
108+
String numberValue;
109+
110+
@io.swagger.v3.oas.annotations.media.Schema(type = "integer", example = "5")
111+
String integerValue;
105112
}
106113

107114
@Test
@@ -126,4 +133,48 @@ public void testExampleStartingWithNumberShouldBeString() throws Exception {
126133
assertEquals(schema.get().getExample(), "5 lacs per annum");
127134
}
128135

136+
@Test
137+
public void testExampleWithNumberTypeShouldHaveExampleAsNumber() throws Exception {
138+
io.swagger.v3.oas.annotations.media.Schema schemaAnnotation =
139+
ExampleHolder.class
140+
.getDeclaredField("numberValue")
141+
.getAnnotation(io.swagger.v3.oas.annotations.media.Schema.class);
142+
143+
Optional<Schema> schema =
144+
AnnotationsUtils.getSchemaFromAnnotation(
145+
schemaAnnotation,
146+
null,
147+
null,
148+
false,
149+
null,
150+
Schema.SchemaResolution.DEFAULT,
151+
null
152+
);
153+
154+
assertTrue(schema.isPresent());
155+
assertEquals(schema.get().getExample(), IntNode.valueOf(10));
156+
}
157+
158+
@Test
159+
public void testExampleWithIntegerTypeShouldHaveExampleAsNumber() throws Exception {
160+
io.swagger.v3.oas.annotations.media.Schema schemaAnnotation =
161+
ExampleHolder.class
162+
.getDeclaredField("integerValue")
163+
.getAnnotation(io.swagger.v3.oas.annotations.media.Schema.class);
164+
165+
Optional<Schema> schema =
166+
AnnotationsUtils.getSchemaFromAnnotation(
167+
schemaAnnotation,
168+
null,
169+
null,
170+
false,
171+
null,
172+
Schema.SchemaResolution.DEFAULT,
173+
null
174+
);
175+
176+
assertTrue(schema.isPresent());
177+
assertEquals(schema.get().getExample(), IntNode.valueOf(5));
178+
}
179+
129180
}

0 commit comments

Comments
 (0)