forked from loafle/openapi-generator-original
[Java][Spring] Add bean vaildation for email datatype (#1115)
This commit is contained in:
parent
196f1228e5
commit
d4a5cd05cc
@ -31,7 +31,7 @@ public class CodegenParameter {
|
|||||||
|
|
||||||
public String example; // example value (x-example)
|
public String example; // example value (x-example)
|
||||||
public String jsonSchema;
|
public String jsonSchema;
|
||||||
public boolean isString, isNumeric, isInteger, isLong, isNumber, isFloat, isDouble, isByteArray, isBinary, isBoolean, isDate, isDateTime, isUuid;
|
public boolean isString, isNumeric, isInteger, isLong, isNumber, isFloat, isDouble, isByteArray, isBinary, isBoolean, isDate, isDateTime, isUuid, isEmail;
|
||||||
public boolean isListContainer, isMapContainer;
|
public boolean isListContainer, isMapContainer;
|
||||||
public boolean isFile;
|
public boolean isFile;
|
||||||
public boolean isEnum;
|
public boolean isEnum;
|
||||||
@ -166,6 +166,7 @@ public class CodegenParameter {
|
|||||||
output.isDate = this.isDate;
|
output.isDate = this.isDate;
|
||||||
output.isDateTime = this.isDateTime;
|
output.isDateTime = this.isDateTime;
|
||||||
output.isUuid = this.isUuid;
|
output.isUuid = this.isUuid;
|
||||||
|
output.isEmail = this.isEmail;
|
||||||
output.isListContainer = this.isListContainer;
|
output.isListContainer = this.isListContainer;
|
||||||
output.isMapContainer = this.isMapContainer;
|
output.isMapContainer = this.isMapContainer;
|
||||||
|
|
||||||
@ -256,6 +257,8 @@ public class CodegenParameter {
|
|||||||
return false;
|
return false;
|
||||||
if (isUuid != that.isUuid)
|
if (isUuid != that.isUuid)
|
||||||
return false;
|
return false;
|
||||||
|
if (isEmail != that.isEmail)
|
||||||
|
return false;
|
||||||
if (isListContainer != that.isListContainer)
|
if (isListContainer != that.isListContainer)
|
||||||
return false;
|
return false;
|
||||||
if (isMapContainer != that.isMapContainer)
|
if (isMapContainer != that.isMapContainer)
|
||||||
@ -342,6 +345,7 @@ public class CodegenParameter {
|
|||||||
result = 31 * result + (isDate ? 13:31);
|
result = 31 * result + (isDate ? 13:31);
|
||||||
result = 31 * result + (isDateTime ? 13:31);
|
result = 31 * result + (isDateTime ? 13:31);
|
||||||
result = 31 * result + (isUuid ? 13:31);
|
result = 31 * result + (isUuid ? 13:31);
|
||||||
|
result = 31 * result + (isEmail ? 13:31);
|
||||||
result = 31 * result + (isListContainer ? 13:31);
|
result = 31 * result + (isListContainer ? 13:31);
|
||||||
result = 31 * result + (isMapContainer ? 13:31);
|
result = 31 * result + (isMapContainer ? 13:31);
|
||||||
result = 31 * result + (isFile ? 13:31);
|
result = 31 * result + (isFile ? 13:31);
|
||||||
@ -409,6 +413,7 @@ public class CodegenParameter {
|
|||||||
", isDate=" + isDate +
|
", isDate=" + isDate +
|
||||||
", isDateTime=" + isDateTime +
|
", isDateTime=" + isDateTime +
|
||||||
", isUuid=" + isUuid +
|
", isUuid=" + isUuid +
|
||||||
|
", isEmail=" + isEmail +
|
||||||
", isListContainer=" + isListContainer +
|
", isListContainer=" + isListContainer +
|
||||||
", isMapContainer=" + isMapContainer +
|
", isMapContainer=" + isMapContainer +
|
||||||
", isFile=" + isFile +
|
", isFile=" + isFile +
|
||||||
|
@ -56,7 +56,7 @@ public class CodegenProperty implements Cloneable {
|
|||||||
public boolean hasMore, required, secondaryParam;
|
public boolean hasMore, required, secondaryParam;
|
||||||
public boolean hasMoreNonReadOnly; // for model constructor, true if next property is not readonly
|
public boolean hasMoreNonReadOnly; // for model constructor, true if next property is not readonly
|
||||||
public boolean isPrimitiveType, isModel, isContainer, isNotContainer;
|
public boolean isPrimitiveType, isModel, isContainer, isNotContainer;
|
||||||
public boolean isString, isNumeric, isInteger, isLong, isNumber, isFloat, isDouble, isByteArray, isBinary, isFile, isBoolean, isDate, isDateTime, isUuid;
|
public boolean isString, isNumeric, isInteger, isLong, isNumber, isFloat, isDouble, isByteArray, isBinary, isFile, isBoolean, isDate, isDateTime, isUuid, isEmail;
|
||||||
public boolean isListContainer, isMapContainer;
|
public boolean isListContainer, isMapContainer;
|
||||||
public boolean isEnum;
|
public boolean isEnum;
|
||||||
public boolean isReadOnly;
|
public boolean isReadOnly;
|
||||||
@ -473,6 +473,7 @@ public class CodegenProperty implements Cloneable {
|
|||||||
result = prime * result + ((isDate ? 13:31));
|
result = prime * result + ((isDate ? 13:31));
|
||||||
result = prime * result + ((isDateTime ? 13:31));
|
result = prime * result + ((isDateTime ? 13:31));
|
||||||
result = prime * result + ((isUuid ? 13:31));
|
result = prime * result + ((isUuid ? 13:31));
|
||||||
|
result = prime * result + ((isEmail ? 13:31));
|
||||||
result = prime * result + ((isMapContainer ? 13:31));
|
result = prime * result + ((isMapContainer ? 13:31));
|
||||||
result = prime * result + ((isListContainer ? 13:31));
|
result = prime * result + ((isListContainer ? 13:31));
|
||||||
result = prime * result + Objects.hashCode(isInherited);
|
result = prime * result + Objects.hashCode(isInherited);
|
||||||
@ -653,6 +654,9 @@ public class CodegenProperty implements Cloneable {
|
|||||||
if (this.isUuid != other.isUuid) {
|
if (this.isUuid != other.isUuid) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
if (this.isEmail != other.isEmail) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
if (this.isBinary != other.isBinary) {
|
if (this.isBinary != other.isBinary) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -780,6 +784,7 @@ public class CodegenProperty implements Cloneable {
|
|||||||
", isDate=" + isDate +
|
", isDate=" + isDate +
|
||||||
", isDateTime=" + isDateTime +
|
", isDateTime=" + isDateTime +
|
||||||
", isUuid=" + isUuid +
|
", isUuid=" + isUuid +
|
||||||
|
", isEmail=" + isEmail +
|
||||||
", isListContainer=" + isListContainer +
|
", isListContainer=" + isListContainer +
|
||||||
", isMapContainer=" + isMapContainer +
|
", isMapContainer=" + isMapContainer +
|
||||||
", isEnum=" + isEnum +
|
", isEnum=" + isEnum +
|
||||||
|
@ -30,7 +30,7 @@ public class CodegenResponse {
|
|||||||
public List<Map<String, Object>> examples;
|
public List<Map<String, Object>> examples;
|
||||||
public String dataType, baseType, containerType;
|
public String dataType, baseType, containerType;
|
||||||
public boolean hasHeaders;
|
public boolean hasHeaders;
|
||||||
public boolean isString, isNumeric, isInteger, isLong, isNumber, isFloat, isDouble, isByteArray, isBoolean, isDate, isDateTime, isUuid;
|
public boolean isString, isNumeric, isInteger, isLong, isNumber, isFloat, isDouble, isByteArray, isBoolean, isDate, isDateTime, isUuid, isEmail;
|
||||||
public boolean isDefault;
|
public boolean isDefault;
|
||||||
public boolean simpleType;
|
public boolean simpleType;
|
||||||
public boolean primitiveType;
|
public boolean primitiveType;
|
||||||
|
@ -1895,6 +1895,9 @@ public class DefaultCodegen implements CodegenConfig {
|
|||||||
// keep isString to true to make it backward compatible
|
// keep isString to true to make it backward compatible
|
||||||
property.isString = true;
|
property.isString = true;
|
||||||
property.isUuid = true;
|
property.isUuid = true;
|
||||||
|
} else if (ModelUtils.isEmailSchema(p)) {
|
||||||
|
property.isString = true;
|
||||||
|
property.isEmail = true;
|
||||||
} else {
|
} else {
|
||||||
property.isString = true;
|
property.isString = true;
|
||||||
}
|
}
|
||||||
@ -2579,8 +2582,9 @@ public class DefaultCodegen implements CodegenConfig {
|
|||||||
}
|
}
|
||||||
|
|
||||||
r.dataType = cp.dataType;
|
r.dataType = cp.dataType;
|
||||||
|
if (Boolean.TRUE.equals(cp.isString) && Boolean.TRUE.equals(cp.isEmail)) {
|
||||||
if (Boolean.TRUE.equals(cp.isString) && Boolean.TRUE.equals(cp.isUuid)) {
|
r.isEmail = true;
|
||||||
|
} else if (Boolean.TRUE.equals(cp.isString) && Boolean.TRUE.equals(cp.isUuid)) {
|
||||||
r.isUuid = true;
|
r.isUuid = true;
|
||||||
} else if (Boolean.TRUE.equals(cp.isByteArray)) {
|
} else if (Boolean.TRUE.equals(cp.isByteArray)) {
|
||||||
r.isByteArray = true;
|
r.isByteArray = true;
|
||||||
@ -3841,8 +3845,9 @@ public class DefaultCodegen implements CodegenConfig {
|
|||||||
LOGGER.error("Codegen Property cannot be null.");
|
LOGGER.error("Codegen Property cannot be null.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (Boolean.TRUE.equals(property.isEmail) && Boolean.TRUE.equals(property.isString)) {
|
||||||
if (Boolean.TRUE.equals(property.isUuid) && Boolean.TRUE.equals(property.isString)) {
|
parameter.isEmail = true;
|
||||||
|
} else if (Boolean.TRUE.equals(property.isUuid) && Boolean.TRUE.equals(property.isString)) {
|
||||||
parameter.isUuid = true;
|
parameter.isUuid = true;
|
||||||
} else if (Boolean.TRUE.equals(property.isByteArray)) {
|
} else if (Boolean.TRUE.equals(property.isByteArray)) {
|
||||||
parameter.isByteArray = true;
|
parameter.isByteArray = true;
|
||||||
|
@ -34,6 +34,7 @@ import org.openapitools.codegen.CodegenType;
|
|||||||
import org.openapitools.codegen.SupportingFile;
|
import org.openapitools.codegen.SupportingFile;
|
||||||
import org.openapitools.codegen.languages.features.BeanValidationFeatures;
|
import org.openapitools.codegen.languages.features.BeanValidationFeatures;
|
||||||
import org.openapitools.codegen.languages.features.OptionalFeatures;
|
import org.openapitools.codegen.languages.features.OptionalFeatures;
|
||||||
|
import org.openapitools.codegen.languages.features.PerformBeanValidationFeatures;
|
||||||
import org.openapitools.codegen.utils.URLPathUtils;
|
import org.openapitools.codegen.utils.URLPathUtils;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
@ -51,7 +52,8 @@ import java.util.stream.Collectors;
|
|||||||
|
|
||||||
|
|
||||||
public class SpringCodegen extends AbstractJavaCodegen
|
public class SpringCodegen extends AbstractJavaCodegen
|
||||||
implements BeanValidationFeatures, OptionalFeatures {
|
implements BeanValidationFeatures, PerformBeanValidationFeatures,
|
||||||
|
OptionalFeatures {
|
||||||
private static final Logger LOGGER = LoggerFactory.getLogger(SpringCodegen.class);
|
private static final Logger LOGGER = LoggerFactory.getLogger(SpringCodegen.class);
|
||||||
|
|
||||||
public static final String TITLE = "title";
|
public static final String TITLE = "title";
|
||||||
@ -89,6 +91,7 @@ public class SpringCodegen extends AbstractJavaCodegen
|
|||||||
protected String responseWrapper = "";
|
protected String responseWrapper = "";
|
||||||
protected boolean useTags = false;
|
protected boolean useTags = false;
|
||||||
protected boolean useBeanValidation = true;
|
protected boolean useBeanValidation = true;
|
||||||
|
protected boolean performBeanValidation = false;
|
||||||
protected boolean implicitHeaders = false;
|
protected boolean implicitHeaders = false;
|
||||||
protected boolean openapiDocketConfig = false;
|
protected boolean openapiDocketConfig = false;
|
||||||
protected boolean apiFirst = false;
|
protected boolean apiFirst = false;
|
||||||
@ -122,6 +125,7 @@ public class SpringCodegen extends AbstractJavaCodegen
|
|||||||
cliOptions.add(CliOption.newBoolean(VIRTUAL_SERVICE, "Generates the virtual service. For more details refer - https://github.com/elan-venture/virtualan/wiki"));
|
cliOptions.add(CliOption.newBoolean(VIRTUAL_SERVICE, "Generates the virtual service. For more details refer - https://github.com/elan-venture/virtualan/wiki"));
|
||||||
cliOptions.add(CliOption.newBoolean(USE_TAGS, "use tags for creating interface and controller classnames", useTags));
|
cliOptions.add(CliOption.newBoolean(USE_TAGS, "use tags for creating interface and controller classnames", useTags));
|
||||||
cliOptions.add(CliOption.newBoolean(USE_BEANVALIDATION, "Use BeanValidation API annotations", useBeanValidation));
|
cliOptions.add(CliOption.newBoolean(USE_BEANVALIDATION, "Use BeanValidation API annotations", useBeanValidation));
|
||||||
|
cliOptions.add(CliOption.newBoolean(PERFORM_BEANVALIDATION, "Use Bean Validation Impl. to perform BeanValidation", performBeanValidation));
|
||||||
cliOptions.add(CliOption.newBoolean(IMPLICIT_HEADERS, "Use of @ApiImplicitParams for headers.", implicitHeaders));
|
cliOptions.add(CliOption.newBoolean(IMPLICIT_HEADERS, "Use of @ApiImplicitParams for headers.", implicitHeaders));
|
||||||
cliOptions.add(CliOption.newBoolean(OPENAPI_DOCKET_CONFIG, "Generate Spring OpenAPI Docket configuration class.", openapiDocketConfig));
|
cliOptions.add(CliOption.newBoolean(OPENAPI_DOCKET_CONFIG, "Generate Spring OpenAPI Docket configuration class.", openapiDocketConfig));
|
||||||
cliOptions.add(CliOption.newBoolean(API_FIRST, "Generate the API from the OAI spec at server compile time (API first approach)", apiFirst));
|
cliOptions.add(CliOption.newBoolean(API_FIRST, "Generate the API from the OAI spec at server compile time (API first approach)", apiFirst));
|
||||||
@ -248,6 +252,11 @@ public class SpringCodegen extends AbstractJavaCodegen
|
|||||||
}
|
}
|
||||||
writePropertyBack(USE_BEANVALIDATION, useBeanValidation);
|
writePropertyBack(USE_BEANVALIDATION, useBeanValidation);
|
||||||
|
|
||||||
|
if (additionalProperties.containsKey(PERFORM_BEANVALIDATION)) {
|
||||||
|
this.setPerformBeanValidation(convertPropertyToBoolean(PERFORM_BEANVALIDATION));
|
||||||
|
}
|
||||||
|
writePropertyBack(PERFORM_BEANVALIDATION, performBeanValidation);
|
||||||
|
|
||||||
if (additionalProperties.containsKey(USE_OPTIONAL)) {
|
if (additionalProperties.containsKey(USE_OPTIONAL)) {
|
||||||
this.setUseOptional(convertPropertyToBoolean(USE_OPTIONAL));
|
this.setUseOptional(convertPropertyToBoolean(USE_OPTIONAL));
|
||||||
}
|
}
|
||||||
@ -761,6 +770,10 @@ public class SpringCodegen extends AbstractJavaCodegen
|
|||||||
this.useBeanValidation = useBeanValidation;
|
this.useBeanValidation = useBeanValidation;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setPerformBeanValidation(boolean performBeanValidation) {
|
||||||
|
this.performBeanValidation = performBeanValidation;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setUseOptional(boolean useOptional) {
|
public void setUseOptional(boolean useOptional) {
|
||||||
this.useOptional = useOptional;
|
this.useOptional = useOptional;
|
||||||
|
@ -31,6 +31,9 @@ import android.os.Parcel;
|
|||||||
import javax.validation.constraints.*;
|
import javax.validation.constraints.*;
|
||||||
import javax.validation.Valid;
|
import javax.validation.Valid;
|
||||||
{{/useBeanValidation}}
|
{{/useBeanValidation}}
|
||||||
|
{{#performBeanValidation}}
|
||||||
|
import org.hibernate.validator.constraints.*;
|
||||||
|
{{/performBeanValidation}}
|
||||||
|
|
||||||
{{#models}}
|
{{#models}}
|
||||||
{{#model}}
|
{{#model}}
|
||||||
|
@ -313,6 +313,14 @@
|
|||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
{{/useBeanValidation}}
|
{{/useBeanValidation}}
|
||||||
|
{{#performBeanValidation}}
|
||||||
|
<!-- Bean Validation Impl. used to perform BeanValidation -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.hibernate</groupId>
|
||||||
|
<artifactId>hibernate-validator</artifactId>
|
||||||
|
<version>5.4.1.Final</version>
|
||||||
|
</dependency>
|
||||||
|
{{/performBeanValidation}}
|
||||||
{{#parcelableModel}}
|
{{#parcelableModel}}
|
||||||
<!-- Needed for Parcelable support-->
|
<!-- Needed for Parcelable support-->
|
||||||
<dependency>
|
<dependency>
|
||||||
|
@ -11,6 +11,8 @@ minLength not set, maxLength set
|
|||||||
}}{{#minItems}}{{^maxItems}}@Size(min={{minItems}}) {{/maxItems}}{{/minItems}}{{!
|
}}{{#minItems}}{{^maxItems}}@Size(min={{minItems}}) {{/maxItems}}{{/minItems}}{{!
|
||||||
@Size: minItems not set && maxItems set
|
@Size: minItems not set && maxItems set
|
||||||
}}{{^minItems}}{{#maxItems}}@Size(max={{maxItems}}) {{/maxItems}}{{/minItems}}{{!
|
}}{{^minItems}}{{#maxItems}}@Size(max={{maxItems}}) {{/maxItems}}{{/minItems}}{{!
|
||||||
|
@Email: performBeanValidation set && isEmail set
|
||||||
|
}}{{#performBeanValidation}}{{#isEmail}}@Email{{/isEmail}}{{/performBeanValidation}}{{!
|
||||||
check for integer or long / all others=decimal type with @Decimal*
|
check for integer or long / all others=decimal type with @Decimal*
|
||||||
isInteger set
|
isInteger set
|
||||||
}}{{#isInteger}}{{#minimum}}@Min({{minimum}}){{/minimum}}{{#maximum}} @Max({{maximum}}) {{/maximum}}{{/isInteger}}{{!
|
}}{{#isInteger}}{{#minimum}}@Min({{minimum}}){{/minimum}}{{#maximum}} @Max({{maximum}}) {{/maximum}}{{/isInteger}}{{!
|
||||||
|
@ -10,6 +10,9 @@ import java.io.Serializable;
|
|||||||
import javax.validation.Valid;
|
import javax.validation.Valid;
|
||||||
import javax.validation.constraints.*;
|
import javax.validation.constraints.*;
|
||||||
{{/useBeanValidation}}
|
{{/useBeanValidation}}
|
||||||
|
{{#performBeanValidation}}
|
||||||
|
import org.hibernate.validator.constraints.*;
|
||||||
|
{{/performBeanValidation}}
|
||||||
{{#jackson}}
|
{{#jackson}}
|
||||||
{{#withXml}}
|
{{#withXml}}
|
||||||
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;
|
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user