Skip to content

Commit a36a01d

Browse files
committed
Merge branch 'main' of https://github.com/BokoEnos/springdoc-openapi into BokoEnos-main
2 parents a511a9e + ef02bc9 commit a36a01d

File tree

8 files changed

+235
-14
lines changed

8 files changed

+235
-14
lines changed

springdoc-openapi-starter-common/src/main/java/org/springdoc/api/AbstractOpenApiResource.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -490,7 +490,7 @@ protected void calculatePath(HandlerMethod handlerMethod, RouterOperation router
490490
// RequestBody in Operation
491491
requestBuilder.getRequestBodyBuilder()
492492
.buildRequestBodyFromDoc(requestBodyDoc, methodAttributes, components,
493-
methodAttributes.getJsonViewAnnotationForRequestBody())
493+
methodAttributes.getJsonViewAnnotationForRequestBody(), locale)
494494
.ifPresent(operation::setRequestBody);
495495
// requests
496496
operation = requestBuilder.build(handlerMethod, requestMethod, operation, methodAttributes, openAPI);

springdoc-openapi-starter-common/src/main/java/org/springdoc/core/configuration/SpringDocConfiguration.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -343,8 +343,8 @@ PropertyResolverUtils propertyResolverUtils(ConfigurableBeanFactory factory, Mes
343343
@Bean
344344
@ConditionalOnMissingBean
345345
@Lazy(false)
346-
RequestBodyService requestBodyBuilder(GenericParameterService parameterBuilder) {
347-
return new RequestBodyService(parameterBuilder);
346+
RequestBodyService requestBodyBuilder(GenericParameterService parameterBuilder, PropertyResolverUtils propertyResolverUtils) {
347+
return new RequestBodyService(parameterBuilder, propertyResolverUtils);
348348
}
349349

350350
/**

springdoc-openapi-starter-common/src/main/java/org/springdoc/core/service/OperationService.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,8 @@ public OpenAPI parse(io.swagger.v3.oas.annotations.Operation apiOperation,
153153
}
154154

155155
// RequestBody in Operation
156-
requestBodyService.buildRequestBodyFromDoc(apiOperation.requestBody(), operation.getRequestBody(), methodAttributes, components).ifPresent(operation::setRequestBody);
156+
requestBodyService.buildRequestBodyFromDoc(apiOperation.requestBody(), operation.getRequestBody(), methodAttributes, components, locale)
157+
.ifPresent(operation::setRequestBody);
157158

158159
// build response
159160
buildResponse(components, apiOperation, operation, methodAttributes);

springdoc-openapi-starter-common/src/main/java/org/springdoc/core/service/RequestBodyService.java

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
package org.springdoc.core.service;
2626

2727
import java.util.Arrays;
28+
import java.util.Locale;
2829
import java.util.Map;
2930
import java.util.Optional;
3031

@@ -39,6 +40,7 @@
3940
import org.springdoc.core.models.MethodAttributes;
4041
import org.springdoc.core.models.ParameterInfo;
4142
import org.springdoc.core.models.RequestBodyInfo;
43+
import org.springdoc.core.utils.PropertyResolverUtils;
4244
import org.springdoc.core.utils.SpringDocAnnotationsUtils;
4345

4446
import org.springframework.core.MethodParameter;
@@ -58,14 +60,21 @@ public class RequestBodyService {
5860
*/
5961
private final GenericParameterService parameterBuilder;
6062

63+
/**
64+
* The Property resolver utils.
65+
*/
66+
private final PropertyResolverUtils propertyResolverUtils;
67+
6168
/**
6269
* Instantiates a new Request body builder.
6370
*
6471
* @param parameterBuilder the parameter builder
72+
* @param propertyResolverUtils the property resolver utils
6573
*/
66-
public RequestBodyService(GenericParameterService parameterBuilder) {
74+
public RequestBodyService(GenericParameterService parameterBuilder, PropertyResolverUtils propertyResolverUtils) {
6775
super();
6876
this.parameterBuilder = parameterBuilder;
77+
this.propertyResolverUtils = propertyResolverUtils;
6978
}
7079

7180
/**
@@ -76,11 +85,12 @@ public RequestBodyService(GenericParameterService parameterBuilder) {
7685
* @param methodAttributes the method attributes
7786
* @param components the components
7887
* @param jsonViewAnnotation the json view annotation
88+
* @param locale the locale
7989
* @return the optional
8090
*/
8191
public Optional<RequestBody> buildRequestBodyFromDoc(
8292
io.swagger.v3.oas.annotations.parameters.RequestBody requestBody, RequestBody requestBodyOp, MethodAttributes methodAttributes,
83-
Components components, JsonView jsonViewAnnotation) {
93+
Components components, JsonView jsonViewAnnotation, Locale locale) {
8494
String[] classConsumes = methodAttributes.getClassConsumes();
8595
String[] methodConsumes = methodAttributes.getMethodConsumes();
8696

@@ -95,7 +105,7 @@ public Optional<RequestBody> buildRequestBodyFromDoc(
95105
}
96106

97107
if (StringUtils.isNotBlank(requestBody.description())) {
98-
requestBodyObject.setDescription(requestBody.description());
108+
requestBodyObject.setDescription(propertyResolverUtils.resolve(requestBody.description(), locale));
99109
isEmpty = false;
100110
}
101111

@@ -191,8 +201,7 @@ private String[] getConsumes(String[] classConsumes) {
191201
*/
192202
public Optional<RequestBody> buildRequestBodyFromDoc(io.swagger.v3.oas.annotations.parameters.RequestBody requestBody,
193203
MethodAttributes methodAttributes, Components components) {
194-
return this.buildRequestBodyFromDoc(requestBody, null, methodAttributes,
195-
components, null);
204+
return this.buildRequestBodyFromDoc(requestBody, null, methodAttributes, components, null, null);
196205
}
197206

198207
/**
@@ -202,12 +211,13 @@ public Optional<RequestBody> buildRequestBodyFromDoc(io.swagger.v3.oas.annotatio
202211
* @param methodAttributes the method attributes
203212
* @param components the components
204213
* @param jsonViewAnnotation the json view annotation
214+
* @param locale the locale
205215
* @return the optional
206216
*/
207217
public Optional<RequestBody> buildRequestBodyFromDoc(io.swagger.v3.oas.annotations.parameters.RequestBody requestBody,
208-
MethodAttributes methodAttributes, Components components, JsonView jsonViewAnnotation) {
218+
MethodAttributes methodAttributes, Components components, JsonView jsonViewAnnotation, Locale locale) {
209219
return this.buildRequestBodyFromDoc(requestBody, null, methodAttributes,
210-
components, jsonViewAnnotation);
220+
components, jsonViewAnnotation, locale);
211221
}
212222

213223
/**
@@ -221,9 +231,8 @@ public Optional<RequestBody> buildRequestBodyFromDoc(io.swagger.v3.oas.annotatio
221231
*/
222232
public Optional<RequestBody> buildRequestBodyFromDoc(
223233
io.swagger.v3.oas.annotations.parameters.RequestBody requestBody, RequestBody requestBodyOp, MethodAttributes methodAttributes,
224-
Components components) {
225-
return this.buildRequestBodyFromDoc(requestBody, requestBodyOp, methodAttributes,
226-
components, null);
234+
Components components, Locale locale) {
235+
return this.buildRequestBodyFromDoc(requestBody, requestBodyOp, methodAttributes, components, null, locale);
227236
}
228237

229238
/**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package test.org.springdoc.api.app173;
2+
3+
import io.swagger.v3.oas.annotations.media.Schema;
4+
5+
/**
6+
* The Example object
7+
*/
8+
@Schema
9+
public class Example {
10+
11+
private String name;
12+
13+
public String getName() {
14+
return name;
15+
}
16+
17+
public void setName(String name) {
18+
this.name = name;
19+
}
20+
21+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package test.org.springdoc.api.app173;
2+
3+
import io.swagger.v3.oas.annotations.Operation;
4+
import org.springframework.http.ResponseEntity;
5+
import org.springframework.web.bind.annotation.PatchMapping;
6+
import org.springframework.web.bind.annotation.PostMapping;
7+
import org.springframework.web.bind.annotation.PutMapping;
8+
import org.springframework.web.bind.annotation.RequestBody;
9+
import org.springframework.web.bind.annotation.RestController;
10+
11+
import java.util.UUID;
12+
13+
import static org.springframework.http.HttpStatus.OK;
14+
15+
/**
16+
* The Example Controller
17+
*/
18+
@RestController
19+
public class ExampleController {
20+
21+
@PostMapping("/example")
22+
@Operation(summary = "insert example", description = "Allows to insert an example")
23+
public ResponseEntity<UUID> postExample(@io.swagger.v3.oas.annotations.parameters.RequestBody(description = "${example.description}") @RequestBody Example example) {
24+
return new ResponseEntity<>(UUID.randomUUID(), OK);
25+
}
26+
27+
@PutMapping("/example")
28+
@Operation(summary = "update example", description = "Allows to update an example")
29+
public ResponseEntity<UUID> putExample(@io.swagger.v3.oas.annotations.parameters.RequestBody(description = "${example2.description:Default description for example}") @RequestBody Example example) {
30+
return new ResponseEntity<>(UUID.randomUUID(), OK);
31+
}
32+
33+
@PatchMapping("/example")
34+
@Operation(summary = "patch example", description = "Allows to patch an example")
35+
public ResponseEntity<UUID> patchExample(@io.swagger.v3.oas.annotations.parameters.RequestBody(description = "Description without the use of variables") @RequestBody Example example) {
36+
return new ResponseEntity<>(UUID.randomUUID(), OK);
37+
}
38+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package test.org.springdoc.api.app173;
2+
3+
import org.springframework.boot.autoconfigure.SpringBootApplication;
4+
import org.springframework.test.context.TestPropertySource;
5+
import test.org.springdoc.api.AbstractSpringDocTest;
6+
7+
/**
8+
* The type Spring doc app 173 test.
9+
*/
10+
@TestPropertySource(properties = "example.description=The example object")
11+
public class SpringDocApp173Test extends AbstractSpringDocTest {
12+
13+
/**
14+
* The type Spring doc test app.
15+
*/
16+
@SpringBootApplication
17+
static class SpringDocTestApp {
18+
}
19+
20+
}
Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
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+
"tags": [
14+
{
15+
"name": "example-controller",
16+
"description": "The Example Controller"
17+
}
18+
],
19+
"paths": {
20+
"/example": {
21+
"put": {
22+
"tags": [
23+
"example-controller"
24+
],
25+
"summary": "update example",
26+
"description": "Allows to update an example",
27+
"operationId": "putExample",
28+
"requestBody": {
29+
"description": "Default description for example",
30+
"content": {
31+
"application/json": {
32+
"schema": {
33+
"$ref": "#/components/schemas/Example"
34+
}
35+
}
36+
},
37+
"required": true
38+
},
39+
"responses": {
40+
"200": {
41+
"description": "OK",
42+
"content": {
43+
"*/*": {
44+
"schema": {
45+
"type": "string",
46+
"format": "uuid"
47+
}
48+
}
49+
}
50+
}
51+
}
52+
},
53+
"post": {
54+
"tags": [
55+
"example-controller"
56+
],
57+
"summary": "insert example",
58+
"description": "Allows to insert an example",
59+
"operationId": "postExample",
60+
"requestBody": {
61+
"description": "The example object",
62+
"content": {
63+
"application/json": {
64+
"schema": {
65+
"$ref": "#/components/schemas/Example"
66+
}
67+
}
68+
},
69+
"required": true
70+
},
71+
"responses": {
72+
"200": {
73+
"description": "OK",
74+
"content": {
75+
"*/*": {
76+
"schema": {
77+
"type": "string",
78+
"format": "uuid"
79+
}
80+
}
81+
}
82+
}
83+
}
84+
},
85+
"patch": {
86+
"tags": [
87+
"example-controller"
88+
],
89+
"summary": "patch example",
90+
"description": "Allows to patch an example",
91+
"operationId": "patchExample",
92+
"requestBody": {
93+
"description": "Description without the use of variables",
94+
"content": {
95+
"application/json": {
96+
"schema": {
97+
"$ref": "#/components/schemas/Example"
98+
}
99+
}
100+
},
101+
"required": true
102+
},
103+
"responses": {
104+
"200": {
105+
"description": "OK",
106+
"content": {
107+
"*/*": {
108+
"schema": {
109+
"type": "string",
110+
"format": "uuid"
111+
}
112+
}
113+
}
114+
}
115+
}
116+
}
117+
}
118+
},
119+
"components": {
120+
"schemas": {
121+
"Example": {
122+
"type": "object",
123+
"properties": {
124+
"name": {
125+
"type": "string"
126+
}
127+
},
128+
"description": "The Example object"
129+
}
130+
}
131+
}
132+
}

0 commit comments

Comments
 (0)