[java] No @NotNull annotation for readOnly (required) attributes - fixes #5026 (#10820)

This commit is contained in:
Daniel Schreiber 2022-02-16 08:33:23 +01:00 committed by GitHub
parent c7367c2d34
commit 035736f5c4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 137 additions and 2 deletions

View File

@ -1,5 +1,7 @@
{{#required}} {{#required}}
{{^isReadOnly}}
@NotNull @NotNull
{{/isReadOnly}}
{{/required}} {{/required}}
{{#isContainer}} {{#isContainer}}
{{^isPrimitiveType}} {{^isPrimitiveType}}

View File

@ -1,4 +1,6 @@
{{#required}} {{#required}}
{{^isReadOnly}}
@NotNull @NotNull
{{/isReadOnly}}
{{/required}} {{/required}}
{{>beanValidationCore}} {{>beanValidationCore}}

View File

@ -1 +1 @@
{{#required}}@NotNull {{/required}}{{#isContainer}}{{^isPrimitiveType}}{{^isEnum}}@Valid {{/isEnum}}{{/isPrimitiveType}}{{/isContainer}}{{^isContainer}}{{^isPrimitiveType}}@Valid {{/isPrimitiveType}}{{/isContainer}}{{>beanValidationCore}} {{#required}}{{^isReadOnly}}@NotNull {{/isReadOnly}}{{/required}}{{#isContainer}}{{^isPrimitiveType}}{{^isEnum}}@Valid {{/isEnum}}{{/isPrimitiveType}}{{/isContainer}}{{^isContainer}}{{^isPrimitiveType}}@Valid {{/isPrimitiveType}}{{/isContainer}}{{>beanValidationCore}}

View File

@ -798,6 +798,68 @@ public class SpringCodegenTest {
} }
} }
@Test
public void shouldAddNotNullOnRequiredAttributes() throws IOException {
File output = Files.createTempDirectory("test").toFile().getCanonicalFile();
output.deleteOnExit();
String outputPath = output.getAbsolutePath().replace('\\', '/');
final OpenAPI openAPI = TestUtils.parseFlattenSpec("src/test/resources/3_0/spring/issue_5026-b.yaml");
final SpringCodegen codegen = new SpringCodegen();
codegen.setOpenAPI(openAPI);
codegen.setOutputDir(output.getAbsolutePath());
ClientOptInput input = new ClientOptInput();
input.openAPI(openAPI);
input.config(codegen);
DefaultGenerator generator = new DefaultGenerator();
generator.setGeneratorPropertyDefault(CodegenConstants.MODELS, "true");
generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_TESTS, "false");
generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_DOCS, "false");
generator.setGeneratorPropertyDefault(CodegenConstants.APIS, "false");
generator.setGeneratorPropertyDefault(CodegenConstants.SUPPORTING_FILES, "false");
generator.opts(input).generate();
assertFileContains(Paths.get(outputPath + "/src/main/java/org/openapitools/model/Dummy.java"), "status");
assertFileContains(Paths.get(outputPath + "/src/main/java/org/openapitools/model/Dummy.java"), "@NotNull");
Files.readAllLines(Paths.get(outputPath + "/src/main/java/org/openapitools/model/Dummy.java")).forEach(System.out::println);
}
@Test
public void shouldNotAddNotNullOnReadOnlyAttributes() throws IOException {
File output = Files.createTempDirectory("test").toFile().getCanonicalFile();
output.deleteOnExit();
String outputPath = output.getAbsolutePath().replace('\\', '/');
final OpenAPI openAPI = TestUtils.parseFlattenSpec("src/test/resources/3_0/spring/issue_5026.yaml");
final SpringCodegen codegen = new SpringCodegen();
codegen.setOpenAPI(openAPI);
codegen.setOutputDir(output.getAbsolutePath());
ClientOptInput input = new ClientOptInput();
input.openAPI(openAPI);
input.config(codegen);
DefaultGenerator generator = new DefaultGenerator();
generator.setGeneratorPropertyDefault(CodegenConstants.MODELS, "true");
generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_TESTS, "false");
generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_DOCS, "false");
generator.setGeneratorPropertyDefault(CodegenConstants.APIS, "false");
generator.setGeneratorPropertyDefault(CodegenConstants.SUPPORTING_FILES, "false");
generator.opts(input).generate();
assertFileContains(Paths.get(outputPath + "/src/main/java/org/openapitools/model/Dummy.java"), "status");
assertFileNotContains(Paths.get(outputPath + "/src/main/java/org/openapitools/model/Dummy.java"), "@NotNull");
Files.readAllLines(Paths.get(outputPath + "/src/main/java/org/openapitools/model/Dummy.java")).forEach(System.out::println);
}
@Test @Test
public void testTypeMappings() { public void testTypeMappings() {
final SpringCodegen codegen = new SpringCodegen(); final SpringCodegen codegen = new SpringCodegen();

View File

@ -0,0 +1,34 @@
openapi: 3.0.0
info:
version: "1.0.0"
title: reactive-spring-boot-request-body-issue
tags:
- name: ReactiveSpringBootRequestBodyIssue
paths:
/some/dummy/endpoint:
post:
tags:
- ReactiveSpringBootRequestBodyIssue
requestBody:
description: request
content:
application/json:
schema:
$ref: '#/components/schemas/Dummy'
required: true
responses:
200:
description: Successfully created reverse listings for retail
content:
application/json:
schema:
$ref: '#/components/schemas/Dummy'
components:
schemas:
Dummy:
required:
- status
type: object
properties:
status:
type: string

View File

@ -0,0 +1,35 @@
openapi: 3.0.0
info:
version: "1.0.0"
title: reactive-spring-boot-request-body-issue
tags:
- name: ReactiveSpringBootRequestBodyIssue
paths:
/some/dummy/endpoint:
post:
tags:
- ReactiveSpringBootRequestBodyIssue
requestBody:
description: request
content:
application/json:
schema:
$ref: '#/components/schemas/Dummy'
required: true
responses:
200:
description: Successfully created reverse listings for retail
content:
application/json:
schema:
$ref: '#/components/schemas/Dummy'
components:
schemas:
Dummy:
required:
- status
type: object
properties:
status:
type: string
readOnly: true