Skip to content

Commit a9cc96b

Browse files
ahrytsiukwing328
authored andcommitted
fix template for RequestBody, added 'required' attribute (#3134) (#4756)
* fix template for RequestBody, added 'required' attribute (#3134) * update Spring samples (#3134)
1 parent 7bd378c commit a9cc96b

File tree

17 files changed

+104
-57
lines changed

17 files changed

+104
-57
lines changed
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{{#isBodyParam}}@ApiParam(value = "{{{description}}}" {{#required}},required=true{{/required}} {{^isContainer}}{{#allowableValues}}, allowableValues="{{{allowableValues}}}"{{/allowableValues}}{{#defaultValue}}, defaultValue={{^isString}}"{{/isString}}{{#isString}}{{#isEnum}}"{{/isEnum}}{{/isString}}{{{defaultValue}}}{{^isString}}"{{/isString}}{{#isString}}{{#isEnum}}"{{/isEnum}}{{/isString}}{{/defaultValue}}{{/isContainer}}) {{#useBeanValidation}}@Valid{{/useBeanValidation}} @RequestBody {{^reactive}}{{{dataType}}}{{/reactive}}{{#reactive}}{{^isListContainer}}Mono{{/isListContainer}}{{#isListContainer}}Flux{{/isListContainer}}<{{{baseType}}}>{{/reactive}} {{paramName}}{{/isBodyParam}}
1+
{{#isBodyParam}}@ApiParam(value = "{{{description}}}" {{#required}},required=true{{/required}} {{^isContainer}}{{#allowableValues}}, allowableValues="{{{allowableValues}}}"{{/allowableValues}}{{#defaultValue}}, defaultValue={{^isString}}"{{/isString}}{{#isString}}{{#isEnum}}"{{/isEnum}}{{/isString}}{{{defaultValue}}}{{^isString}}"{{/isString}}{{#isString}}{{#isEnum}}"{{/isEnum}}{{/isString}}{{/defaultValue}}{{/isContainer}}) {{#useBeanValidation}}@Valid{{/useBeanValidation}} @RequestBody{{^required}}(required = false){{/required}} {{^reactive}}{{{dataType}}}{{/reactive}}{{#reactive}}{{^isListContainer}}Mono{{/isListContainer}}{{#isListContainer}}Flux{{/isListContainer}}<{{{baseType}}}>{{/reactive}} {{paramName}}{{/isBodyParam}}

modules/openapi-generator/src/test/java/org/openapitools/codegen/java/spring/SpringCodegenTest.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -416,4 +416,28 @@ public void reactiveRequiredSpringBoot() {
416416
codegen.additionalProperties().put(CodegenConstants.LIBRARY, "spring-cloud");
417417
codegen.processOpts();
418418
}
419+
420+
@Test
421+
public void testDoGenerateRequestBodyRequiredAttribute_3134_Regression() throws Exception {
422+
File output = Files.createTempDirectory("test").toFile().getCanonicalFile();
423+
output.deleteOnExit();
424+
String outputPath = output.getAbsolutePath().replace('\\', '/');
425+
426+
OpenAPI openAPI = new OpenAPIParser()
427+
.readLocation("src/test/resources/3_0/3134-regression.yaml", null, new ParseOptions()).getOpenAPI();
428+
429+
SpringCodegen codegen = new SpringCodegen();
430+
codegen.setOutputDir(output.getAbsolutePath());
431+
codegen.additionalProperties().put(CXFServerFeatures.LOAD_TEST_DATA_FROM_FILE, "true");
432+
433+
ClientOptInput input = new ClientOptInput();
434+
input.setOpenAPI(openAPI);
435+
input.setConfig(codegen);
436+
437+
MockDefaultGenerator generator = new MockDefaultGenerator();
438+
generator.opts(input).generate();
439+
440+
checkFileContains(generator, outputPath + "/src/main/java/org/openapitools/api/ExampleApi.java",
441+
"@RequestBody(required = false");
442+
}
419443
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
openapi: 3.0.2
2+
info:
3+
title: info
4+
description: info
5+
version: 0.1.0
6+
7+
paths:
8+
/example/api:
9+
post:
10+
summary: summary
11+
description: description
12+
requestBody:
13+
required: false
14+
content:
15+
application/json:
16+
schema:
17+
type: object
18+
properties:
19+
name:
20+
type: string
21+
responses:
22+
200:
23+
description: response

samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/FakeApi.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ default CompletableFuture<ResponseEntity<Void>> createXmlItem(@ApiParam(value =
7878
@RequestMapping(value = "/fake/outer/boolean",
7979
produces = { "*/*" },
8080
method = RequestMethod.POST)
81-
default CompletableFuture<ResponseEntity<Boolean>> fakeOuterBooleanSerialize(@ApiParam(value = "Input boolean as post body" ) @Valid @RequestBody Boolean body) {
81+
default CompletableFuture<ResponseEntity<Boolean>> fakeOuterBooleanSerialize(@ApiParam(value = "Input boolean as post body" ) @Valid @RequestBody(required = false) Boolean body) {
8282
return CompletableFuture.completedFuture(new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED));
8383

8484
}
@@ -97,7 +97,7 @@ default CompletableFuture<ResponseEntity<Boolean>> fakeOuterBooleanSerialize(@Ap
9797
@RequestMapping(value = "/fake/outer/composite",
9898
produces = { "*/*" },
9999
method = RequestMethod.POST)
100-
default CompletableFuture<ResponseEntity<OuterComposite>> fakeOuterCompositeSerialize(@ApiParam(value = "Input composite as post body" ) @Valid @RequestBody OuterComposite body) {
100+
default CompletableFuture<ResponseEntity<OuterComposite>> fakeOuterCompositeSerialize(@ApiParam(value = "Input composite as post body" ) @Valid @RequestBody(required = false) OuterComposite body) {
101101
return CompletableFuture.supplyAsync(()-> {
102102
getRequest().ifPresent(request -> {
103103
for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
@@ -127,7 +127,7 @@ default CompletableFuture<ResponseEntity<OuterComposite>> fakeOuterCompositeSeri
127127
@RequestMapping(value = "/fake/outer/number",
128128
produces = { "*/*" },
129129
method = RequestMethod.POST)
130-
default CompletableFuture<ResponseEntity<BigDecimal>> fakeOuterNumberSerialize(@ApiParam(value = "Input number as post body" ) @Valid @RequestBody BigDecimal body) {
130+
default CompletableFuture<ResponseEntity<BigDecimal>> fakeOuterNumberSerialize(@ApiParam(value = "Input number as post body" ) @Valid @RequestBody(required = false) BigDecimal body) {
131131
return CompletableFuture.completedFuture(new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED));
132132

133133
}
@@ -146,7 +146,7 @@ default CompletableFuture<ResponseEntity<BigDecimal>> fakeOuterNumberSerialize(@
146146
@RequestMapping(value = "/fake/outer/string",
147147
produces = { "*/*" },
148148
method = RequestMethod.POST)
149-
default CompletableFuture<ResponseEntity<String>> fakeOuterStringSerialize(@ApiParam(value = "Input string as post body" ) @Valid @RequestBody String body) {
149+
default CompletableFuture<ResponseEntity<String>> fakeOuterStringSerialize(@ApiParam(value = "Input string as post body" ) @Valid @RequestBody(required = false) String body) {
150150
return CompletableFuture.completedFuture(new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED));
151151

152152
}

samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/FakeApi.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ default ResponseEntity<Void> createXmlItem(@ApiParam(value = "XmlItem Body" ,req
7777
@RequestMapping(value = "/fake/outer/boolean",
7878
produces = { "*/*" },
7979
method = RequestMethod.POST)
80-
default ResponseEntity<Boolean> fakeOuterBooleanSerialize(@ApiParam(value = "Input boolean as post body" ) @Valid @RequestBody Boolean body) {
80+
default ResponseEntity<Boolean> fakeOuterBooleanSerialize(@ApiParam(value = "Input boolean as post body" ) @Valid @RequestBody(required = false) Boolean body) {
8181
return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
8282

8383
}
@@ -96,7 +96,7 @@ default ResponseEntity<Boolean> fakeOuterBooleanSerialize(@ApiParam(value = "Inp
9696
@RequestMapping(value = "/fake/outer/composite",
9797
produces = { "*/*" },
9898
method = RequestMethod.POST)
99-
default ResponseEntity<OuterComposite> fakeOuterCompositeSerialize(@ApiParam(value = "Input composite as post body" ) @Valid @RequestBody OuterComposite body) {
99+
default ResponseEntity<OuterComposite> fakeOuterCompositeSerialize(@ApiParam(value = "Input composite as post body" ) @Valid @RequestBody(required = false) OuterComposite body) {
100100
getRequest().ifPresent(request -> {
101101
for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
102102
if (mediaType.isCompatibleWith(MediaType.valueOf("*/*"))) {
@@ -124,7 +124,7 @@ default ResponseEntity<OuterComposite> fakeOuterCompositeSerialize(@ApiParam(val
124124
@RequestMapping(value = "/fake/outer/number",
125125
produces = { "*/*" },
126126
method = RequestMethod.POST)
127-
default ResponseEntity<BigDecimal> fakeOuterNumberSerialize(@ApiParam(value = "Input number as post body" ) @Valid @RequestBody BigDecimal body) {
127+
default ResponseEntity<BigDecimal> fakeOuterNumberSerialize(@ApiParam(value = "Input number as post body" ) @Valid @RequestBody(required = false) BigDecimal body) {
128128
return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
129129

130130
}
@@ -143,7 +143,7 @@ default ResponseEntity<BigDecimal> fakeOuterNumberSerialize(@ApiParam(value = "I
143143
@RequestMapping(value = "/fake/outer/string",
144144
produces = { "*/*" },
145145
method = RequestMethod.POST)
146-
default ResponseEntity<String> fakeOuterStringSerialize(@ApiParam(value = "Input string as post body" ) @Valid @RequestBody String body) {
146+
default ResponseEntity<String> fakeOuterStringSerialize(@ApiParam(value = "Input string as post body" ) @Valid @RequestBody(required = false) String body) {
147147
return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
148148

149149
}

samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/FakeApi.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ public interface FakeApi {
6666
@RequestMapping(value = "/fake/outer/boolean",
6767
produces = { "*/*" },
6868
method = RequestMethod.POST)
69-
ResponseEntity<Boolean> fakeOuterBooleanSerialize(@ApiParam(value = "Input boolean as post body" ) @Valid @RequestBody Boolean body);
69+
ResponseEntity<Boolean> fakeOuterBooleanSerialize(@ApiParam(value = "Input boolean as post body" ) @Valid @RequestBody(required = false) Boolean body);
7070

7171

7272
/**
@@ -82,7 +82,7 @@ public interface FakeApi {
8282
@RequestMapping(value = "/fake/outer/composite",
8383
produces = { "*/*" },
8484
method = RequestMethod.POST)
85-
ResponseEntity<OuterComposite> fakeOuterCompositeSerialize(@ApiParam(value = "Input composite as post body" ) @Valid @RequestBody OuterComposite body);
85+
ResponseEntity<OuterComposite> fakeOuterCompositeSerialize(@ApiParam(value = "Input composite as post body" ) @Valid @RequestBody(required = false) OuterComposite body);
8686

8787

8888
/**
@@ -98,7 +98,7 @@ public interface FakeApi {
9898
@RequestMapping(value = "/fake/outer/number",
9999
produces = { "*/*" },
100100
method = RequestMethod.POST)
101-
ResponseEntity<BigDecimal> fakeOuterNumberSerialize(@ApiParam(value = "Input number as post body" ) @Valid @RequestBody BigDecimal body);
101+
ResponseEntity<BigDecimal> fakeOuterNumberSerialize(@ApiParam(value = "Input number as post body" ) @Valid @RequestBody(required = false) BigDecimal body);
102102

103103

104104
/**
@@ -114,7 +114,7 @@ public interface FakeApi {
114114
@RequestMapping(value = "/fake/outer/string",
115115
produces = { "*/*" },
116116
method = RequestMethod.POST)
117-
ResponseEntity<String> fakeOuterStringSerialize(@ApiParam(value = "Input string as post body" ) @Valid @RequestBody String body);
117+
ResponseEntity<String> fakeOuterStringSerialize(@ApiParam(value = "Input string as post body" ) @Valid @RequestBody(required = false) String body);
118118

119119

120120
/**

samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/FakeApiController.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ public ResponseEntity<Void> createXmlItem(@ApiParam(value = "XmlItem Body" ,requ
6262
* @return Output boolean (status code 200)
6363
* @see FakeApi#fakeOuterBooleanSerialize
6464
*/
65-
public ResponseEntity<Boolean> fakeOuterBooleanSerialize(@ApiParam(value = "Input boolean as post body" ) @Valid @RequestBody Boolean body) {
65+
public ResponseEntity<Boolean> fakeOuterBooleanSerialize(@ApiParam(value = "Input boolean as post body" ) @Valid @RequestBody(required = false) Boolean body) {
6666
return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
6767

6868
}
@@ -75,7 +75,7 @@ public ResponseEntity<Boolean> fakeOuterBooleanSerialize(@ApiParam(value = "Inpu
7575
* @return Output composite (status code 200)
7676
* @see FakeApi#fakeOuterCompositeSerialize
7777
*/
78-
public ResponseEntity<OuterComposite> fakeOuterCompositeSerialize(@ApiParam(value = "Input composite as post body" ) @Valid @RequestBody OuterComposite body) {
78+
public ResponseEntity<OuterComposite> fakeOuterCompositeSerialize(@ApiParam(value = "Input composite as post body" ) @Valid @RequestBody(required = false) OuterComposite body) {
7979
for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
8080
if (mediaType.isCompatibleWith(MediaType.valueOf("*/*"))) {
8181
String exampleString = "{ \"my_string\" : \"my_string\", \"my_number\" : 0.8008281904610115, \"my_boolean\" : true }";
@@ -95,7 +95,7 @@ public ResponseEntity<OuterComposite> fakeOuterCompositeSerialize(@ApiParam(valu
9595
* @return Output number (status code 200)
9696
* @see FakeApi#fakeOuterNumberSerialize
9797
*/
98-
public ResponseEntity<BigDecimal> fakeOuterNumberSerialize(@ApiParam(value = "Input number as post body" ) @Valid @RequestBody BigDecimal body) {
98+
public ResponseEntity<BigDecimal> fakeOuterNumberSerialize(@ApiParam(value = "Input number as post body" ) @Valid @RequestBody(required = false) BigDecimal body) {
9999
return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
100100

101101
}
@@ -108,7 +108,7 @@ public ResponseEntity<BigDecimal> fakeOuterNumberSerialize(@ApiParam(value = "In
108108
* @return Output string (status code 200)
109109
* @see FakeApi#fakeOuterStringSerialize
110110
*/
111-
public ResponseEntity<String> fakeOuterStringSerialize(@ApiParam(value = "Input string as post body" ) @Valid @RequestBody String body) {
111+
public ResponseEntity<String> fakeOuterStringSerialize(@ApiParam(value = "Input string as post body" ) @Valid @RequestBody(required = false) String body) {
112112
return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
113113

114114
}

samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/FakeApi.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ public interface FakeApi {
6666
@RequestMapping(value = "/fake/outer/boolean",
6767
produces = { "*/*" },
6868
method = RequestMethod.POST)
69-
ResponseEntity<Boolean> fakeOuterBooleanSerialize(@ApiParam(value = "Input boolean as post body" ) @Valid @RequestBody Boolean body);
69+
ResponseEntity<Boolean> fakeOuterBooleanSerialize(@ApiParam(value = "Input boolean as post body" ) @Valid @RequestBody(required = false) Boolean body);
7070

7171

7272
/**
@@ -82,7 +82,7 @@ public interface FakeApi {
8282
@RequestMapping(value = "/fake/outer/composite",
8383
produces = { "*/*" },
8484
method = RequestMethod.POST)
85-
ResponseEntity<OuterComposite> fakeOuterCompositeSerialize(@ApiParam(value = "Input composite as post body" ) @Valid @RequestBody OuterComposite body);
85+
ResponseEntity<OuterComposite> fakeOuterCompositeSerialize(@ApiParam(value = "Input composite as post body" ) @Valid @RequestBody(required = false) OuterComposite body);
8686

8787

8888
/**
@@ -98,7 +98,7 @@ public interface FakeApi {
9898
@RequestMapping(value = "/fake/outer/number",
9999
produces = { "*/*" },
100100
method = RequestMethod.POST)
101-
ResponseEntity<BigDecimal> fakeOuterNumberSerialize(@ApiParam(value = "Input number as post body" ) @Valid @RequestBody BigDecimal body);
101+
ResponseEntity<BigDecimal> fakeOuterNumberSerialize(@ApiParam(value = "Input number as post body" ) @Valid @RequestBody(required = false) BigDecimal body);
102102

103103

104104
/**
@@ -114,7 +114,7 @@ public interface FakeApi {
114114
@RequestMapping(value = "/fake/outer/string",
115115
produces = { "*/*" },
116116
method = RequestMethod.POST)
117-
ResponseEntity<String> fakeOuterStringSerialize(@ApiParam(value = "Input string as post body" ) @Valid @RequestBody String body);
117+
ResponseEntity<String> fakeOuterStringSerialize(@ApiParam(value = "Input string as post body" ) @Valid @RequestBody(required = false) String body);
118118

119119

120120
/**

samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/FakeApiController.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ public ResponseEntity<Void> createXmlItem(@ApiParam(value = "XmlItem Body" ,requ
6262
* @return Output boolean (status code 200)
6363
* @see FakeApi#fakeOuterBooleanSerialize
6464
*/
65-
public ResponseEntity<Boolean> fakeOuterBooleanSerialize(@ApiParam(value = "Input boolean as post body" ) @Valid @RequestBody Boolean body) {
65+
public ResponseEntity<Boolean> fakeOuterBooleanSerialize(@ApiParam(value = "Input boolean as post body" ) @Valid @RequestBody(required = false) Boolean body) {
6666
return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
6767

6868
}
@@ -75,7 +75,7 @@ public ResponseEntity<Boolean> fakeOuterBooleanSerialize(@ApiParam(value = "Inpu
7575
* @return Output composite (status code 200)
7676
* @see FakeApi#fakeOuterCompositeSerialize
7777
*/
78-
public ResponseEntity<OuterComposite> fakeOuterCompositeSerialize(@ApiParam(value = "Input composite as post body" ) @Valid @RequestBody OuterComposite body) {
78+
public ResponseEntity<OuterComposite> fakeOuterCompositeSerialize(@ApiParam(value = "Input composite as post body" ) @Valid @RequestBody(required = false) OuterComposite body) {
7979
for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
8080
if (mediaType.isCompatibleWith(MediaType.valueOf("*/*"))) {
8181
String exampleString = "{ \"my_string\" : \"my_string\", \"my_number\" : 0.8008281904610115, \"my_boolean\" : true }";
@@ -95,7 +95,7 @@ public ResponseEntity<OuterComposite> fakeOuterCompositeSerialize(@ApiParam(valu
9595
* @return Output number (status code 200)
9696
* @see FakeApi#fakeOuterNumberSerialize
9797
*/
98-
public ResponseEntity<BigDecimal> fakeOuterNumberSerialize(@ApiParam(value = "Input number as post body" ) @Valid @RequestBody BigDecimal body) {
98+
public ResponseEntity<BigDecimal> fakeOuterNumberSerialize(@ApiParam(value = "Input number as post body" ) @Valid @RequestBody(required = false) BigDecimal body) {
9999
return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
100100

101101
}
@@ -108,7 +108,7 @@ public ResponseEntity<BigDecimal> fakeOuterNumberSerialize(@ApiParam(value = "In
108108
* @return Output string (status code 200)
109109
* @see FakeApi#fakeOuterStringSerialize
110110
*/
111-
public ResponseEntity<String> fakeOuterStringSerialize(@ApiParam(value = "Input string as post body" ) @Valid @RequestBody String body) {
111+
public ResponseEntity<String> fakeOuterStringSerialize(@ApiParam(value = "Input string as post body" ) @Valid @RequestBody(required = false) String body) {
112112
return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
113113

114114
}

0 commit comments

Comments
 (0)