[bugfix][18008]: fix getBeanValidation for scalar as ref (#18014)

This commit is contained in:
Aliaksei
2024-03-04 06:04:57 +01:00
committed by GitHub
parent 2d155105a4
commit 92314232f8
15 changed files with 47 additions and 27 deletions

View File

@@ -966,7 +966,15 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code
}
if (items.get$ref() != null) {
return "@Valid ";
Map<String, Schema> shemas = this.openAPI.getComponents().getSchemas();
String ref = ModelUtils.getSimpleRef(items.get$ref());
if (ref != null) {
Schema<?> schema = shemas.get(ref);
if (schema == null || ModelUtils.isObjectSchema(schema)) {
return "@Valid ";
}
items = schema;
}
}
if (ModelUtils.isStringSchema(items)) {
@@ -1651,11 +1659,11 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code
// the response data types should not contains a bean validation annotation.
if (property.dataType.contains("@")) {
property.dataType = property.dataType.replaceAll("(?:(?i)@[a-z0-9]*+\\s*)*+", "");
property.dataType = property.dataType.replaceAll("(?:(?i)@[a-z0-9]*+([(].*[)]|\\s*))*+", "");
}
// the response data types should not contains a bean validation annotation.
if (response.dataType.contains("@")) {
response.dataType = response.dataType.replaceAll("(?:(?i)@[a-z0-9]*+\\s*)*+", "");
response.dataType = response.dataType.replaceAll("(?:(?i)@[a-z0-9]*+([(].*[)]|\\s*))*+", "");
}
}

View File

@@ -113,6 +113,9 @@ public class JavaValidationArrayPrimitivesTest {
private static Consumer<Map<String, File>> assertWithValidationWithJsonNullable() {
return files -> JavaFileAssert.assertThat(files.get("Foo.java"))
.isNormalClass()
.hasProperty("category")
.withType("List<@Pattern(regexp = \"^[a-zA-Z0-9 .:!()-]$\") @Size(max = 50) String>")
.toType()
.hasProperty("stringPattern")
.withType("Set<@Pattern(regexp = \"[a-z]\") String>")
.toType()

View File

@@ -14,9 +14,18 @@ paths:
$ref: '#/components/schemas/Foo'
components:
schemas:
string50:
type: string
pattern: "^[a-zA-Z0-9 .:!()-]$"
maxLength: 50
Foo:
type: object
properties:
category:
type: array
maxItems: 20
items:
$ref: "#/components/schemas/string50"
stringPattern:
type: array
uniqueItems: true

View File

@@ -118,7 +118,7 @@ public interface FakeService {
@GET
@Consumes({ "application/x-www-form-urlencoded" })
void testEnumParameters(@HeaderParam("enum_header_string_array") List<String> enumHeaderStringArray, @HeaderParam("enum_header_string") @DefaultValue("-efg") String enumHeaderString, @QueryParam("enum_query_string_array") List<String> enumQueryStringArray, @QueryParam("enum_query_string") @DefaultValue("-efg") String enumQueryString, @QueryParam("enum_query_integer") Integer enumQueryInteger, @QueryParam("enum_query_double") Double enumQueryDouble, @QueryParam("enum_query_model_array") List<@Valid EnumClass> enumQueryModelArray, @FormParam(value = "enum_form_string_array") List<String> enumFormStringArray, @FormParam(value = "enum_form_string") String enumFormString);
void testEnumParameters(@HeaderParam("enum_header_string_array") List<String> enumHeaderStringArray, @HeaderParam("enum_header_string") @DefaultValue("-efg") String enumHeaderString, @QueryParam("enum_query_string_array") List<String> enumQueryStringArray, @QueryParam("enum_query_string") @DefaultValue("-efg") String enumQueryString, @QueryParam("enum_query_integer") Integer enumQueryInteger, @QueryParam("enum_query_double") Double enumQueryDouble, @QueryParam("enum_query_model_array") List<EnumClass> enumQueryModelArray, @FormParam(value = "enum_form_string_array") List<String> enumFormStringArray, @FormParam(value = "enum_form_string") String enumFormString);
@DELETE
void testGroupParameters(@QueryParam("required_string_group") @NotNull Integer requiredStringGroup, @HeaderParam("required_boolean_group") @NotNull Boolean requiredBooleanGroup, @QueryParam("required_int64_group") @NotNull Long requiredInt64Group, @QueryParam("string_group") Integer stringGroup, @HeaderParam("boolean_group") Boolean booleanGroup, @QueryParam("int64_group") Long int64Group);

View File

@@ -149,7 +149,7 @@ public class FakeServiceImpl implements FakeService {
@GET
@Consumes({ "application/x-www-form-urlencoded" })
public void testEnumParameters(@HeaderParam("enum_header_string_array") List<String> enumHeaderStringArray,@HeaderParam("enum_header_string") @DefaultValue("-efg") String enumHeaderString,@QueryParam("enum_query_string_array") List<String> enumQueryStringArray,@QueryParam("enum_query_string") @DefaultValue("-efg") String enumQueryString,@QueryParam("enum_query_integer") Integer enumQueryInteger,@QueryParam("enum_query_double") Double enumQueryDouble,@QueryParam("enum_query_model_array") List<@Valid EnumClass> enumQueryModelArray,@FormParam(value = "enum_form_string_array") List<String> enumFormStringArray,@FormParam(value = "enum_form_string") String enumFormString) {
public void testEnumParameters(@HeaderParam("enum_header_string_array") List<String> enumHeaderStringArray,@HeaderParam("enum_header_string") @DefaultValue("-efg") String enumHeaderString,@QueryParam("enum_query_string_array") List<String> enumQueryStringArray,@QueryParam("enum_query_string") @DefaultValue("-efg") String enumQueryString,@QueryParam("enum_query_integer") Integer enumQueryInteger,@QueryParam("enum_query_double") Double enumQueryDouble,@QueryParam("enum_query_model_array") List<EnumClass> enumQueryModelArray,@FormParam(value = "enum_form_string_array") List<String> enumFormStringArray,@FormParam(value = "enum_form_string") String enumFormString) {
}
@DELETE

View File

@@ -34,7 +34,7 @@ public class ObjectWithDeprecatedFields {
private DeprecatedObject deprecatedRef;
private List<@Valid String> bars = null;
private List<String> bars = null;
/**
* Get uuid
@@ -106,18 +106,18 @@ public class ObjectWithDeprecatedFields {
* @deprecated
**/
@Deprecated
public List<@Valid String> getBars() {
public List<String> getBars() {
return bars;
}
/**
* Set bars
**/
public void setBars(List<@Valid String> bars) {
public void setBars(List<String> bars) {
this.bars = bars;
}
public ObjectWithDeprecatedFields bars(List<@Valid String> bars) {
public ObjectWithDeprecatedFields bars(List<String> bars) {
this.bars = bars;
return this;
}

View File

@@ -15,7 +15,7 @@ public class ObjectWithDeprecatedFields {
private String uuid;
private BigDecimal id;
private DeprecatedObject deprecatedRef;
private List<@Valid String> bars;
private List<String> bars;
/**
* Default constructor.
@@ -36,7 +36,7 @@ public class ObjectWithDeprecatedFields {
String uuid,
BigDecimal id,
DeprecatedObject deprecatedRef,
List<@Valid String> bars
List<String> bars
) {
this.uuid = uuid;
this.id = id;
@@ -86,11 +86,11 @@ public class ObjectWithDeprecatedFields {
* Get bars
* @return bars
*/
public List<@Valid String> getBars() {
public List<String> getBars() {
return bars;
}
public void setBars(List<@Valid String> bars) {
public void setBars(List<String> bars) {
this.bars = bars;
}

View File

@@ -252,7 +252,7 @@ public class FakeApi {
@io.swagger.annotations.ApiResponse(code = 400, message = "Invalid request", response = Void.class),
@io.swagger.annotations.ApiResponse(code = 404, message = "Not found", response = Void.class)
})
public Response testEnumParameters(@ApiParam(value = "Header parameter enum test (string array)" , allowableValues=">, $")@HeaderParam("enum_header_string_array") List<String> enumHeaderStringArray,@ApiParam(value = "Header parameter enum test (string)" , allowableValues="_abc, -efg, (xyz)", defaultValue="-efg")@HeaderParam("enum_header_string") String enumHeaderString,@ApiParam(value = "Query parameter enum test (string array)") @QueryParam("enum_query_string_array") @Valid List<String> enumQueryStringArray,@ApiParam(value = "Query parameter enum test (string)", allowableValues="_abc, -efg, (xyz)", defaultValue = "-efg") @DefaultValue("-efg") @QueryParam("enum_query_string") String enumQueryString,@ApiParam(value = "Query parameter enum test (double)", allowableValues="1, -2") @QueryParam("enum_query_integer") Integer enumQueryInteger,@ApiParam(value = "Query parameter enum test (double)", allowableValues="1.1, -1.2") @QueryParam("enum_query_double") Double enumQueryDouble,@ApiParam(value = "") @QueryParam("enum_query_model_array") @Valid List<@Valid EnumClass> enumQueryModelArray,@ApiParam(value = "Form parameter enum test (string array)", allowableValues=">, $", defaultValue="$") @DefaultValue("$") @FormParam("enum_form_string_array") List<String> enumFormStringArray,@ApiParam(value = "Form parameter enum test (string)", allowableValues="_abc, -efg, (xyz)", defaultValue="-efg") @DefaultValue("-efg") @FormParam("enum_form_string") String enumFormString,@Context SecurityContext securityContext)
public Response testEnumParameters(@ApiParam(value = "Header parameter enum test (string array)" , allowableValues=">, $")@HeaderParam("enum_header_string_array") List<String> enumHeaderStringArray,@ApiParam(value = "Header parameter enum test (string)" , allowableValues="_abc, -efg, (xyz)", defaultValue="-efg")@HeaderParam("enum_header_string") String enumHeaderString,@ApiParam(value = "Query parameter enum test (string array)") @QueryParam("enum_query_string_array") @Valid List<String> enumQueryStringArray,@ApiParam(value = "Query parameter enum test (string)", allowableValues="_abc, -efg, (xyz)", defaultValue = "-efg") @DefaultValue("-efg") @QueryParam("enum_query_string") String enumQueryString,@ApiParam(value = "Query parameter enum test (double)", allowableValues="1, -2") @QueryParam("enum_query_integer") Integer enumQueryInteger,@ApiParam(value = "Query parameter enum test (double)", allowableValues="1.1, -1.2") @QueryParam("enum_query_double") Double enumQueryDouble,@ApiParam(value = "") @QueryParam("enum_query_model_array") @Valid List<EnumClass> enumQueryModelArray,@ApiParam(value = "Form parameter enum test (string array)", allowableValues=">, $", defaultValue="$") @DefaultValue("$") @FormParam("enum_form_string_array") List<String> enumFormStringArray,@ApiParam(value = "Form parameter enum test (string)", allowableValues="_abc, -efg, (xyz)", defaultValue="-efg") @DefaultValue("-efg") @FormParam("enum_form_string") String enumFormString,@Context SecurityContext securityContext)
throws NotFoundException {
return delegate.testEnumParameters(enumHeaderStringArray, enumHeaderString, enumQueryStringArray, enumQueryString, enumQueryInteger, enumQueryDouble, enumQueryModelArray, enumFormStringArray, enumFormString, securityContext);
}

View File

@@ -46,7 +46,7 @@ public abstract class FakeApiService {
public abstract Response testBodyWithQueryParams( @NotNull String query,User user,SecurityContext securityContext) throws NotFoundException;
public abstract Response testClientModel(Client client,SecurityContext securityContext) throws NotFoundException;
public abstract Response testEndpointParameters(BigDecimal number,Double _double,String patternWithoutDelimiter,byte[] _byte,Integer integer,Integer int32,Long int64,Float _float,String string,FormDataBodyPart binaryBodypart,Date date,Date dateTime,String password,String paramCallback,SecurityContext securityContext) throws NotFoundException;
public abstract Response testEnumParameters(List<String> enumHeaderStringArray,String enumHeaderString,List<String> enumQueryStringArray,String enumQueryString,Integer enumQueryInteger,Double enumQueryDouble,List<@Valid EnumClass> enumQueryModelArray,List<String> enumFormStringArray,String enumFormString,SecurityContext securityContext) throws NotFoundException;
public abstract Response testEnumParameters(List<String> enumHeaderStringArray,String enumHeaderString,List<String> enumQueryStringArray,String enumQueryString,Integer enumQueryInteger,Double enumQueryDouble,List<EnumClass> enumQueryModelArray,List<String> enumFormStringArray,String enumFormString,SecurityContext securityContext) throws NotFoundException;
public abstract Response testGroupParameters( @NotNull Integer requiredStringGroup, @NotNull Boolean requiredBooleanGroup, @NotNull Long requiredInt64Group,Integer stringGroup,Boolean booleanGroup,Long int64Group,SecurityContext securityContext) throws NotFoundException;
public abstract Response testInlineAdditionalProperties(Map<String, String> requestBody,SecurityContext securityContext) throws NotFoundException;
public abstract Response testInlineFreeformAdditionalProperties(TestInlineFreeformAdditionalPropertiesRequest testInlineFreeformAdditionalPropertiesRequest,SecurityContext securityContext) throws NotFoundException;

View File

@@ -52,7 +52,7 @@ public class ObjectWithDeprecatedFields {
public static final String JSON_PROPERTY_BARS = "bars";
@JsonProperty(JSON_PROPERTY_BARS)
private List<@Valid String> bars;
private List<String> bars;
public ObjectWithDeprecatedFields uuid(String uuid) {
this.uuid = uuid;
@@ -114,7 +114,7 @@ public class ObjectWithDeprecatedFields {
this.deprecatedRef = deprecatedRef;
}
public ObjectWithDeprecatedFields bars(List<@Valid String> bars) {
public ObjectWithDeprecatedFields bars(List<String> bars) {
this.bars = bars;
return this;
}
@@ -134,11 +134,11 @@ public class ObjectWithDeprecatedFields {
@JsonProperty(value = "bars")
@ApiModelProperty(value = "")
public List<@Valid String> getBars() {
public List<String> getBars() {
return bars;
}
public void setBars(List<@Valid String> bars) {
public void setBars(List<String> bars) {
this.bars = bars;
}

View File

@@ -102,7 +102,7 @@ public class FakeApiServiceImpl extends FakeApiService {
return Response.ok().entity(new ApiResponseMessage(ApiResponseMessage.OK, "magic!")).build();
}
@Override
public Response testEnumParameters(List<String> enumHeaderStringArray, String enumHeaderString, List<String> enumQueryStringArray, String enumQueryString, Integer enumQueryInteger, Double enumQueryDouble, List<@Valid EnumClass> enumQueryModelArray, List<String> enumFormStringArray, String enumFormString, SecurityContext securityContext) throws NotFoundException {
public Response testEnumParameters(List<String> enumHeaderStringArray, String enumHeaderString, List<String> enumQueryStringArray, String enumQueryString, Integer enumQueryInteger, Double enumQueryDouble, List<EnumClass> enumQueryModelArray, List<String> enumFormStringArray, String enumFormString, SecurityContext securityContext) throws NotFoundException {
// do some magic!
return Response.ok().entity(new ApiResponseMessage(ApiResponseMessage.OK, "magic!")).build();
}

View File

@@ -261,7 +261,7 @@ public class FakeApi {
@ApiResponse(responseCode = "404", description = "Not found", content =
@Content(schema = @Schema(implementation = Void.class))),
}, tags={ "fake", })
public Response testEnumParameters(@Schema(description = "Header parameter enum test (string array)" , allowableValues=">, $")@HeaderParam("enum_header_string_array") List<String> enumHeaderStringArray,@Schema(description = "Header parameter enum test (string)" , allowableValues="_abc, -efg, (xyz)", defaultValue="-efg")@HeaderParam("enum_header_string") String enumHeaderString,@Schema(description = "Query parameter enum test (string array)") @QueryParam("enum_query_string_array") @Valid List<String> enumQueryStringArray,@Schema(description = "Query parameter enum test (string)", allowableValues="_abc, -efg, (xyz)", defaultValue = "-efg") @DefaultValue("-efg") @QueryParam("enum_query_string") String enumQueryString,@Schema(description = "Query parameter enum test (double)", allowableValues="1, -2") @QueryParam("enum_query_integer") Integer enumQueryInteger,@Schema(description = "Query parameter enum test (double)", allowableValues="1.1, -1.2") @QueryParam("enum_query_double") Double enumQueryDouble,@Schema(description = "") @QueryParam("enum_query_model_array") @Valid List<@Valid EnumClass> enumQueryModelArray,@Schema(description = "Form parameter enum test (string array)", allowableValues=">, $", defaultValue="$") @DefaultValue("$") @QueryParam("enum_form_string_array") List<String> enumFormStringArray,@Schema(description = "Form parameter enum test (string)", allowableValues="_abc, -efg, (xyz)", defaultValue="-efg") @DefaultValue("-efg") @QueryParam("enum_form_string") String enumFormString,@Context SecurityContext securityContext)
public Response testEnumParameters(@Schema(description = "Header parameter enum test (string array)" , allowableValues=">, $")@HeaderParam("enum_header_string_array") List<String> enumHeaderStringArray,@Schema(description = "Header parameter enum test (string)" , allowableValues="_abc, -efg, (xyz)", defaultValue="-efg")@HeaderParam("enum_header_string") String enumHeaderString,@Schema(description = "Query parameter enum test (string array)") @QueryParam("enum_query_string_array") @Valid List<String> enumQueryStringArray,@Schema(description = "Query parameter enum test (string)", allowableValues="_abc, -efg, (xyz)", defaultValue = "-efg") @DefaultValue("-efg") @QueryParam("enum_query_string") String enumQueryString,@Schema(description = "Query parameter enum test (double)", allowableValues="1, -2") @QueryParam("enum_query_integer") Integer enumQueryInteger,@Schema(description = "Query parameter enum test (double)", allowableValues="1.1, -1.2") @QueryParam("enum_query_double") Double enumQueryDouble,@Schema(description = "") @QueryParam("enum_query_model_array") @Valid List<EnumClass> enumQueryModelArray,@Schema(description = "Form parameter enum test (string array)", allowableValues=">, $", defaultValue="$") @DefaultValue("$") @QueryParam("enum_form_string_array") List<String> enumFormStringArray,@Schema(description = "Form parameter enum test (string)", allowableValues="_abc, -efg, (xyz)", defaultValue="-efg") @DefaultValue("-efg") @QueryParam("enum_form_string") String enumFormString,@Context SecurityContext securityContext)
throws NotFoundException {
return delegate.testEnumParameters(enumHeaderStringArray, enumHeaderString, enumQueryStringArray, enumQueryString, enumQueryInteger, enumQueryDouble, enumQueryModelArray, enumFormStringArray, enumFormString, securityContext);
}

View File

@@ -46,7 +46,7 @@ public abstract class FakeApiService {
public abstract Response testBodyWithQueryParams( @NotNull String query,User user,SecurityContext securityContext) throws NotFoundException;
public abstract Response testClientModel(Client client,SecurityContext securityContext) throws NotFoundException;
public abstract Response testEndpointParameters(BigDecimal number,Double _double,String patternWithoutDelimiter,byte[] _byte,Integer integer,Integer int32,Long int64,Float _float,String string,FormDataBodyPart binaryBodypart,Date date,Date dateTime,String password,String paramCallback,SecurityContext securityContext) throws NotFoundException;
public abstract Response testEnumParameters(List<String> enumHeaderStringArray,String enumHeaderString,List<String> enumQueryStringArray,String enumQueryString,Integer enumQueryInteger,Double enumQueryDouble,List<@Valid EnumClass> enumQueryModelArray,List<String> enumFormStringArray,String enumFormString,SecurityContext securityContext) throws NotFoundException;
public abstract Response testEnumParameters(List<String> enumHeaderStringArray,String enumHeaderString,List<String> enumQueryStringArray,String enumQueryString,Integer enumQueryInteger,Double enumQueryDouble,List<EnumClass> enumQueryModelArray,List<String> enumFormStringArray,String enumFormString,SecurityContext securityContext) throws NotFoundException;
public abstract Response testGroupParameters( @NotNull Integer requiredStringGroup, @NotNull Boolean requiredBooleanGroup, @NotNull Long requiredInt64Group,Integer stringGroup,Boolean booleanGroup,Long int64Group,SecurityContext securityContext) throws NotFoundException;
public abstract Response testInlineAdditionalProperties(Map<String, String> requestBody,SecurityContext securityContext) throws NotFoundException;
public abstract Response testInlineFreeformAdditionalProperties(TestInlineFreeformAdditionalPropertiesRequest testInlineFreeformAdditionalPropertiesRequest,SecurityContext securityContext) throws NotFoundException;

View File

@@ -51,7 +51,7 @@ public class ObjectWithDeprecatedFields {
public static final String JSON_PROPERTY_BARS = "bars";
@JsonProperty(JSON_PROPERTY_BARS)
private List<@Valid String> bars;
private List<String> bars;
public ObjectWithDeprecatedFields uuid(String uuid) {
this.uuid = uuid;
@@ -113,7 +113,7 @@ public class ObjectWithDeprecatedFields {
this.deprecatedRef = deprecatedRef;
}
public ObjectWithDeprecatedFields bars(List<@Valid String> bars) {
public ObjectWithDeprecatedFields bars(List<String> bars) {
this.bars = bars;
return this;
}
@@ -133,11 +133,11 @@ public class ObjectWithDeprecatedFields {
@JsonProperty(value = "bars")
@Schema(description = "")
public List<@Valid String> getBars() {
public List<String> getBars() {
return bars;
}
public void setBars(List<@Valid String> bars) {
public void setBars(List<String> bars) {
this.bars = bars;
}

View File

@@ -102,7 +102,7 @@ public class FakeApiServiceImpl extends FakeApiService {
return Response.ok().entity(new ApiResponseMessage(ApiResponseMessage.OK, "magic!")).build();
}
@Override
public Response testEnumParameters(List<String> enumHeaderStringArray, String enumHeaderString, List<String> enumQueryStringArray, String enumQueryString, Integer enumQueryInteger, Double enumQueryDouble, List<@Valid EnumClass> enumQueryModelArray, List<String> enumFormStringArray, String enumFormString, SecurityContext securityContext) throws NotFoundException {
public Response testEnumParameters(List<String> enumHeaderStringArray, String enumHeaderString, List<String> enumQueryStringArray, String enumQueryString, Integer enumQueryInteger, Double enumQueryDouble, List<EnumClass> enumQueryModelArray, List<String> enumFormStringArray, String enumFormString, SecurityContext securityContext) throws NotFoundException {
// do some magic!
return Response.ok().entity(new ApiResponseMessage(ApiResponseMessage.OK, "magic!")).build();
}