Skip to content

Commit 006c9e2

Browse files
author
springdoc
committed
fixes #202
1 parent 1e45243 commit 006c9e2

File tree

7 files changed

+145
-9
lines changed

7 files changed

+145
-9
lines changed

springdoc-openapi-common/src/main/java/org/springdoc/core/AbstractParameterBuilder.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
@SuppressWarnings("rawtypes")
3232
public abstract class AbstractParameterBuilder {
3333

34-
protected LocalVariableTableParameterNameDiscoverer localSpringDocParameterNameDiscoverer;
34+
protected final LocalVariableTableParameterNameDiscoverer localSpringDocParameterNameDiscoverer;
3535

3636
public AbstractParameterBuilder(LocalVariableTableParameterNameDiscoverer localSpringDocParameterNameDiscoverer) {
3737
this.localSpringDocParameterNameDiscoverer = localSpringDocParameterNameDiscoverer;
@@ -128,6 +128,17 @@ Parameter buildParameterFromDoc(io.swagger.v3.oas.annotations.Parameter paramete
128128
} else {
129129
Schema schema = AnnotationsUtils.getSchemaFromAnnotation(parameterDoc.schema(), components, jsonView)
130130
.orElse(null);
131+
if (schema == null) {
132+
if (parameterDoc.content().length > 0) {
133+
if (AnnotationsUtils.hasSchemaAnnotation(parameterDoc.content()[0].schema())) {
134+
schema = AnnotationsUtils.getSchemaFromAnnotation(parameterDoc.content()[0].schema(), components, jsonView).orElse(null);
135+
} else if (AnnotationsUtils.hasArrayAnnotation(parameterDoc.content()[0].array())) {
136+
schema = AnnotationsUtils.getArraySchema(parameterDoc.content()[0].array(), components, jsonView).orElse(null);
137+
}
138+
} else {
139+
schema = AnnotationsUtils.getArraySchema(parameterDoc.array(), components, jsonView).orElse(null);
140+
}
141+
}
131142
parameter.setSchema(schema);
132143
}
133144

@@ -163,7 +174,7 @@ Schema calculateSchema(Components components, java.lang.reflect.Parameter parame
163174
if (isFile(parameterizedType)) {
164175
return extractFileSchema(paramName, requestBodyInfo);
165176
}
166-
schemaN = calculateSchemaFromParameterizedType( components, returnType, jsonView);
177+
schemaN = calculateSchemaFromParameterizedType(components, returnType, jsonView);
167178
} else {
168179
schemaN = SpringDocAnnotationsUtils.resolveSchemaFromType(schemaImplementation, components, jsonView);
169180
}

springdoc-openapi-webflux-core/src/main/java/org/springdoc/api/OpenApiResource.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package org.springdoc.api;
22

33
import com.fasterxml.jackson.core.JsonProcessingException;
4-
import com.fasterxml.jackson.databind.MapperFeature;
54
import io.swagger.v3.core.util.Json;
65
import io.swagger.v3.core.util.PathUtils;
76
import io.swagger.v3.core.util.Yaml;
@@ -50,7 +49,7 @@ public Mono<String> openapiJson(ServerHttpRequest serverHttpRequest, @Value(API_
5049
throws JsonProcessingException {
5150
calculateServerUrl(serverHttpRequest, apiDocsUrl);
5251
OpenAPI openAPI = this.getOpenApi();
53-
return Mono.just(Json.mapper().configure(MapperFeature.SORT_PROPERTIES_ALPHABETICALLY, true).writeValueAsString(openAPI));
52+
return Mono.just(Json.mapper().writeValueAsString(openAPI));
5453
}
5554

5655
@Operation(hidden = true)
@@ -59,7 +58,7 @@ public Mono<String> openapiYaml(ServerHttpRequest serverHttpRequest,
5958
@Value(DEFAULT_API_DOCS_URL_YAML) String apiDocsUrl) throws JsonProcessingException {
6059
calculateServerUrl(serverHttpRequest, apiDocsUrl);
6160
OpenAPI openAPI = this.getOpenApi();
62-
return Mono.just(Yaml.mapper().configure(MapperFeature.SORT_PROPERTIES_ALPHABETICALLY, true).writeValueAsString(openAPI));
61+
return Mono.just(Yaml.mapper().writeValueAsString(openAPI));
6362
}
6463

6564
@Override

springdoc-openapi-webmvc-core/src/main/java/org/springdoc/api/OpenApiResource.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package org.springdoc.api;
22

33
import com.fasterxml.jackson.core.JsonProcessingException;
4-
import com.fasterxml.jackson.databind.MapperFeature;
54
import io.swagger.v3.core.util.Json;
65
import io.swagger.v3.core.util.PathUtils;
76
import io.swagger.v3.core.util.ReflectionUtils;
@@ -57,8 +56,7 @@ public String openapiJson(HttpServletRequest request, @Value(API_DOCS_URL) Strin
5756
throws JsonProcessingException {
5857
calculateServerUrl(request, apiDocsUrl);
5958
OpenAPI openAPI = this.getOpenApi();
60-
return Json.mapper().configure(MapperFeature.SORT_PROPERTIES_ALPHABETICALLY, true)
61-
.writeValueAsString(openAPI);
59+
return Json.mapper().writeValueAsString(openAPI);
6260
}
6361

6462
@Operation(hidden = true)
@@ -67,7 +65,7 @@ public String openapiYaml(HttpServletRequest request, @Value(DEFAULT_API_DOCS_UR
6765
throws JsonProcessingException {
6866
calculateServerUrl(request, apiDocsUrl);
6967
OpenAPI openAPI = this.getOpenApi();
70-
return Yaml.mapper().configure(MapperFeature.SORT_PROPERTIES_ALPHABETICALLY, true).writeValueAsString(openAPI);
68+
return Yaml.mapper().writeValueAsString(openAPI);
7169
}
7270

7371
@Override
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package test.org.springdoc.api.app61;
2+
3+
import io.swagger.v3.oas.annotations.Operation;
4+
import io.swagger.v3.oas.annotations.Parameter;
5+
import io.swagger.v3.oas.annotations.enums.ParameterIn;
6+
import io.swagger.v3.oas.annotations.media.ArraySchema;
7+
import io.swagger.v3.oas.annotations.media.Content;
8+
import io.swagger.v3.oas.annotations.media.Schema;
9+
import org.springframework.web.bind.annotation.GetMapping;
10+
import org.springframework.web.bind.annotation.RestController;
11+
12+
@RestController
13+
public class HelloController {
14+
15+
16+
@Operation(description = "List", parameters = {
17+
@Parameter(description = "Name", name = "name", in = ParameterIn.QUERY),
18+
@Parameter(description = "Phone", name = "phone", in = ParameterIn.QUERY),
19+
@Parameter(description = "createdFrom", name = "createdFrom", in = ParameterIn.QUERY, content = @Content(array = @ArraySchema(schema = @Schema(type = "string")))),
20+
@Parameter(description = "createdRange", name = "createdRange", in = ParameterIn.QUERY, array = @ArraySchema(schema = @Schema(type = "string", format = "date"), minItems = 2, maxItems = 2))
21+
})
22+
@GetMapping(value = "/persons-with-user")
23+
public String persons(String name, String phone, String createdFrom, String createdRange) {
24+
return "OK";
25+
}
26+
27+
28+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package test.org.springdoc.api.app61;
2+
3+
import test.org.springdoc.api.AbstractSpringDocTest;
4+
5+
public class SpringDocApp61Test extends AbstractSpringDocTest {}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package test.org.springdoc.api.app61;
2+
3+
import org.springframework.boot.SpringApplication;
4+
import org.springframework.boot.autoconfigure.SpringBootApplication;
5+
6+
@SpringBootApplication
7+
public class SpringDocTestApp {
8+
public static void main(String[] args) {
9+
SpringApplication.run(SpringDocTestApp.class, args);
10+
}
11+
}
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
{
2+
"openapi": "3.0.1",
3+
"info": {
4+
"title": "OpenAPI definition",
5+
"version": "v0"
6+
},
7+
"servers": [
8+
{
9+
"url": "http://localhost",
10+
"description": "Generated server url"
11+
}
12+
],
13+
"paths": {
14+
"/persons-with-user": {
15+
"get": {
16+
"tags": [
17+
"hello-controller"
18+
],
19+
"description": "List",
20+
"operationId": "persons",
21+
"parameters": [
22+
{
23+
"name": "name",
24+
"in": "query",
25+
"description": "Name",
26+
"required": true,
27+
"schema": {
28+
"type": "string"
29+
}
30+
},
31+
{
32+
"name": "phone",
33+
"in": "query",
34+
"description": "Phone",
35+
"required": true,
36+
"schema": {
37+
"type": "string"
38+
}
39+
},
40+
{
41+
"name": "createdFrom",
42+
"in": "query",
43+
"description": "createdFrom",
44+
"required": true,
45+
"schema": {
46+
"type": "array",
47+
"items": {
48+
"type": "string"
49+
}
50+
}
51+
},
52+
{
53+
"name": "createdRange",
54+
"in": "query",
55+
"description": "createdRange",
56+
"required": true,
57+
"schema": {
58+
"maxItems": 2,
59+
"minItems": 2,
60+
"type": "array",
61+
"items": {
62+
"type": "string",
63+
"format": "date"
64+
}
65+
}
66+
}
67+
],
68+
"responses": {
69+
"200": {
70+
"description": "default response",
71+
"content": {
72+
"*/*": {
73+
"schema": {
74+
"type": "string"
75+
}
76+
}
77+
}
78+
}
79+
}
80+
}
81+
}
82+
},
83+
"components": {}
84+
}

0 commit comments

Comments
 (0)