Skip to content

Commit 5faf9ac

Browse files
author
bnasslahsen
committed
components schema not generated. Fixes #601
1 parent e35c15c commit 5faf9ac

File tree

5 files changed

+130
-26
lines changed

5 files changed

+130
-26
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -180,9 +180,9 @@ public Operation build(HandlerMethod handlerMethod, RequestMethod requestMethod,
180180
parameterDoc = parametersDocMap.get(parameterInfo.getpName());
181181
// use documentation as reference
182182
if (parameterDoc != null) {
183-
if (parameterDoc.hidden())
183+
if (parameterDoc.hidden() || parameterDoc.schema().hidden())
184184
continue;
185-
parameter = parameterBuilder.buildParameterFromDoc(parameterDoc, null, methodAttributes.getJsonViewAnnotation());
185+
parameter = parameterBuilder.buildParameterFromDoc(parameterDoc, components, methodAttributes.getJsonViewAnnotation());
186186
parameterInfo.setParameterModel(parameter);
187187
}
188188

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

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -178,14 +178,10 @@ private void setSchema(io.swagger.v3.oas.annotations.Parameter parameterDoc, Com
178178
if (StringUtils.isNotBlank(parameterDoc.ref()))
179179
parameter.$ref(parameterDoc.ref());
180180
else {
181-
Schema schema = AnnotationsUtils.getSchemaFromAnnotation(parameterDoc.schema(), components, jsonView).orElse(null);
181+
Schema schema = AnnotationsUtils.getSchema(parameterDoc.schema(), null,false,parameterDoc.schema().implementation(),components,jsonView ).orElse(null);
182182
if (schema == null) {
183-
if (parameterDoc.content().length > 0) {
184-
if (AnnotationsUtils.hasSchemaAnnotation(parameterDoc.content()[0].schema()))
185-
schema = AnnotationsUtils.getSchemaFromAnnotation(parameterDoc.content()[0].schema(), components, jsonView).orElse(null);
186-
else if (AnnotationsUtils.hasArrayAnnotation(parameterDoc.content()[0].array()))
187-
schema = AnnotationsUtils.getArraySchema(parameterDoc.content()[0].array(), components, jsonView).orElse(null);
188-
}
183+
if (parameterDoc.content().length > 0)
184+
schema = AnnotationsUtils.getSchema(parameterDoc.content()[0], components, jsonView).orElse(null);
189185
else
190186
schema = AnnotationsUtils.getArraySchema(parameterDoc.array(), components, jsonView).orElse(null);
191187
}

springdoc-openapi-webmvc-core/src/test/java/test/org/springdoc/api/app58/HelloController.java

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,12 @@
2121
import com.fasterxml.jackson.databind.JsonNode;
2222
import io.swagger.v3.oas.annotations.Operation;
2323
import io.swagger.v3.oas.annotations.Parameter;
24+
import io.swagger.v3.oas.annotations.media.Content;
2425
import io.swagger.v3.oas.annotations.media.Schema;
2526

2627
import org.springframework.web.bind.annotation.GetMapping;
2728
import org.springframework.web.bind.annotation.PostMapping;
29+
import org.springframework.web.bind.annotation.RequestParam;
2830
import org.springframework.web.bind.annotation.RestController;
2931

3032
@RestController
@@ -38,6 +40,60 @@ public Object example(@Parameter(schema = @Schema(hidden = true)) JsonNode json)
3840

3941
@GetMapping("/example")
4042
public void test(@Parameter(schema = @Schema(hidden = true)) JsonNode json) {
43+
}
44+
45+
@GetMapping(value = "/foo")
46+
public void foobar(@Parameter(description = "User", name = "user",
47+
schema = @Schema(implementation = PersonDTO.class)) @RequestParam("bar") String bar) {
48+
49+
}
50+
51+
@GetMapping(value = "/foo1")
52+
public void foobar1(@Parameter(description = "User", name = "user",
53+
content = @Content(mediaType = "application/json",
54+
schema = @Schema(implementation = PersonDTO.class))) @RequestParam("bar") String bar) {
55+
56+
}
57+
58+
class PersonDTO {
59+
private String email;
60+
61+
private String firstName;
4162

63+
private String lastName;
64+
65+
public PersonDTO() {
66+
}
67+
68+
public PersonDTO(final String email, final String firstName, final String lastName) {
69+
this.email = email;
70+
this.firstName = firstName;
71+
this.lastName = lastName;
72+
}
73+
74+
public String getEmail() {
75+
return email;
76+
}
77+
78+
public void setEmail(final String email) {
79+
this.email = email;
80+
}
81+
82+
public String getFirstName() {
83+
return firstName;
84+
}
85+
86+
public void setFirstName(final String firstName) {
87+
this.firstName = firstName;
88+
}
89+
90+
public String getLastName() {
91+
return lastName;
92+
}
93+
94+
public void setLastName(final String lastName) {
95+
this.lastName = lastName;
96+
}
4297
}
98+
4399
}

springdoc-openapi-webmvc-core/src/test/resources/results/app12.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,9 @@
2121
{
2222
"name": "name",
2323
"in": "query",
24-
"schema": {}
24+
"schema": {
25+
"type": "string"
26+
}
2527
}
2628
],
2729
"responses": {

springdoc-openapi-webmvc-core/src/test/resources/results/app58.json

Lines changed: 66 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,6 @@
1717
"hello-controller"
1818
],
1919
"operationId": "test",
20-
"parameters": [
21-
{
22-
"name": "json",
23-
"in": "query",
24-
"required": true,
25-
"schema": {}
26-
}
27-
],
2820
"responses": {
2921
"200": {
3022
"description": "default response"
@@ -39,13 +31,6 @@
3931
],
4032
"summary": "schema example",
4133
"operationId": "example",
42-
"requestBody": {
43-
"content": {
44-
"application/json": {
45-
"schema": {}
46-
}
47-
}
48-
},
4934
"responses": {
5035
"200": {
5136
"description": "default response",
@@ -59,7 +44,72 @@
5944
}
6045
}
6146
}
47+
},
48+
"/foo": {
49+
"get": {
50+
"tags": [
51+
"hello-controller"
52+
],
53+
"operationId": "foobar",
54+
"parameters": [
55+
{
56+
"name": "user",
57+
"in": "query",
58+
"description": "User",
59+
"required": true,
60+
"schema": {
61+
"$ref": "#/components/schemas/PersonDTO"
62+
}
63+
}
64+
],
65+
"responses": {
66+
"200": {
67+
"description": "default response"
68+
}
69+
}
70+
}
71+
},
72+
"/foo1": {
73+
"get": {
74+
"tags": [
75+
"hello-controller"
76+
],
77+
"operationId": "foobar1",
78+
"parameters": [
79+
{
80+
"name": "user",
81+
"in": "query",
82+
"description": "User",
83+
"required": true,
84+
"schema": {
85+
"$ref": "#/components/schemas/PersonDTO"
86+
}
87+
}
88+
],
89+
"responses": {
90+
"200": {
91+
"description": "default response"
92+
}
93+
}
94+
}
6295
}
6396
},
64-
"components": {}
97+
"components": {
98+
"schemas": {
99+
"PersonDTO": {
100+
"type": "object",
101+
"properties": {
102+
"email": {
103+
"type": "string"
104+
},
105+
"firstName": {
106+
"type": "string"
107+
},
108+
"lastName": {
109+
"type": "string"
110+
}
111+
}
112+
}
113+
}
114+
}
65115
}

0 commit comments

Comments
 (0)