added JavaSpring beanValidation for RequestBody parameters fix #13932 (#13936)

This commit is contained in:
Mintas 2023-02-03 16:26:48 +03:00 committed by GitHub
parent 14669d226b
commit 6b0644115b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 57 additions and 1 deletions

View File

@ -0,0 +1 @@
{{! RequestBody required param is responsible for optional and nullability }}{{>beanValidationCore}}

View File

@ -1 +1 @@
{{#isBodyParam}}{{>paramDoc}}{{#useBeanValidation}} @Valid{{/useBeanValidation}} @RequestBody{{^required}}(required = false){{/required}} {{^reactive}}{{{dataType}}}{{/reactive}}{{#reactive}}{{^isArray}}Mono<{{{dataType}}}>{{/isArray}}{{#isArray}}Flux<{{{baseType}}}>{{/isArray}}{{/reactive}} {{paramName}}{{/isBodyParam}}
{{#isBodyParam}}{{>paramDoc}}{{#useBeanValidation}} @Valid{{>beanValidationBodyParams}}{{/useBeanValidation}} @RequestBody{{^required}}(required = false){{/required}} {{^reactive}}{{{dataType}}}{{/reactive}}{{#reactive}}{{^isArray}}Mono<{{{dataType}}}>{{/isArray}}{{#isArray}}Flux<{{{baseType}}}>{{/isArray}}{{/reactive}} {{paramName}}{{/isBodyParam}}

View File

@ -1809,6 +1809,38 @@ public class SpringCodegenTest {
.bodyContainsLines("return Arrays.equals(this.picture, testObject.picture);");
}
@Test
public void useBeanValidationGenerateAnnotationsForRequestBody_issue13932() throws IOException {
File output = Files.createTempDirectory("test").toFile().getCanonicalFile();
output.deleteOnExit();
OpenAPI openAPI = new OpenAPIParser()
.readLocation("src/test/resources/bugs/issue_13932.yml", null, new ParseOptions()).getOpenAPI();
SpringCodegen codegen = new SpringCodegen();
codegen.setLibrary(SPRING_BOOT);
codegen.setOutputDir(output.getAbsolutePath());
codegen.additionalProperties().put(SpringCodegen.INTERFACE_ONLY, "true");
codegen.additionalProperties().put(SpringCodegen.USE_BEANVALIDATION, "true");
codegen.additionalProperties().put(CodegenConstants.MODEL_PACKAGE, "xyz.model");
codegen.additionalProperties().put(CodegenConstants.API_PACKAGE, "xyz.controller");
ClientOptInput input = new ClientOptInput()
.openAPI(openAPI)
.config(codegen);
DefaultGenerator generator = new DefaultGenerator();
Map<String, File> files = generator.opts(input).generate().stream()
.collect(Collectors.toMap(File::getName, Function.identity()));
JavaFileAssert.assertThat(files.get("AddApi.java"))
.printFileContent()
.assertMethod("addPost")
.hasParameter("body")
.assertParameterAnnotations()
.containsWithNameAndAttributes("Min", ImmutableMap.of("value", "2"));
}
@Test
public void shouldHandleSeparatelyInterfaceAndModelAdditionalAnnotations() throws IOException {
File output = Files.createTempDirectory("test").toFile().getCanonicalFile();

View File

@ -0,0 +1,23 @@
openapi: 3.0.3
info:
version: 1.0.0
description: Specification to reproduce beanValidation bodyParam issue
title: RequestBodyValidationTest Api
paths:
/add:
post:
requestBody:
content:
application/json:
schema:
type: integer
title: quantity
minimum: 2
required: true
responses:
'200':
description: OK
content:
application/json:
schema:
type: boolean