Skip to content

Commit fba026a

Browse files
committed
Add support for jakarta.validation.constraints.Email
1 parent 16638e3 commit fba026a

3 files changed

Lines changed: 30 additions & 3 deletions

File tree

modules/swagger-core/src/main/java/io/swagger/v3/core/jackson/ModelResolver.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@
6464
import io.swagger.v3.oas.models.media.StringSchema;
6565
import io.swagger.v3.oas.models.media.UUIDSchema;
6666
import io.swagger.v3.oas.models.media.XML;
67+
import javax.validation.constraints.Email;
6768
import org.apache.commons.lang3.StringUtils;
6869
import org.apache.commons.lang3.math.NumberUtils;
6970
import org.slf4j.Logger;
@@ -1851,6 +1852,20 @@ protected boolean applyBeanValidatorAnnotations(Schema property, Annotation[] an
18511852
}
18521853
}
18531854
}
1855+
if (annos.containsKey("javax.validation.constraints.Email")) {
1856+
Email email = (Email) annos.get("javax.validation.constraints.Email");
1857+
boolean apply = checkGroupValidation(email.groups(), invocationGroups, acceptNoGroups);
1858+
if (apply) {
1859+
if (isStringSchema(property)) {
1860+
property.setFormat("email");
1861+
modified = true;
1862+
}
1863+
if (property.getItems() != null && isStringSchema(property.getItems())) {
1864+
property.getItems().setFormat("email");
1865+
modified = true;
1866+
}
1867+
}
1868+
}
18541869
if (validatorProcessor != null && validatorProcessor.getMode().equals(ValidatorProcessor.MODE.AFTER)) {
18551870
modified = validatorProcessor.applyBeanValidatorAnnotations(property, annotations, parent, applyNotNullAnnotations) || modified;
18561871
}
@@ -1961,6 +1976,12 @@ protected boolean applyBeanValidatorAnnotationsNoGroups(Schema property, Annotat
19611976
modified = true;
19621977
}
19631978
}
1979+
if (annos.containsKey("javax.validation.constraints.Email")) {
1980+
if (isStringSchema(property)) {
1981+
property.setFormat("email");
1982+
modified = true;
1983+
}
1984+
}
19641985
return modified;
19651986
}
19661987

modules/swagger-core/src/test/java/io/swagger/v3/core/oas/models/BeanValidationsModel.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import javax.validation.constraints.DecimalMax;
44
import javax.validation.constraints.DecimalMin;
5+
import javax.validation.constraints.Email;
56
import javax.validation.constraints.Max;
67
import javax.validation.constraints.Min;
78
import javax.validation.constraints.NotNull;
@@ -18,14 +19,15 @@ public class BeanValidationsModel {
1819
@Max(99)
1920
protected Integer age;
2021

22+
@Pattern(regexp = "(?![-._])[-._a-zA-Z0-9]{3,32}")
2123
protected String username;
2224

2325
@Size(min = 6, max = 20)
2426
protected String password;
2527

2628
protected String passwordHint;
2729

28-
@Pattern(regexp = "(.+?)@(.+?)")
30+
@Email
2931
protected String email;
3032

3133
@DecimalMin(value = "0.1", inclusive = false)

modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/BeanValidatorTest.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import io.swagger.v3.core.converter.ModelConverters;
44
import io.swagger.v3.core.oas.models.BeanValidationsModel;
55
import io.swagger.v3.oas.models.media.ArraySchema;
6+
import io.swagger.v3.oas.models.media.EmailSchema;
67
import io.swagger.v3.oas.models.media.IntegerSchema;
78
import io.swagger.v3.oas.models.media.NumberSchema;
89
import io.swagger.v3.oas.models.media.Schema;
@@ -23,6 +24,9 @@ public void readBeanValidatorTest() {
2324

2425
Assert.assertTrue(model.getRequired().contains("id"));
2526

27+
final StringSchema username = (StringSchema) properties.get("username");
28+
Assert.assertEquals((String) username.getPattern(), "(?![-._])[-._a-zA-Z0-9]{3,32}");
29+
2630
final IntegerSchema age = (IntegerSchema) properties.get("age");
2731
Assert.assertEquals(age.getMinimum(), new BigDecimal(13.0));
2832
Assert.assertEquals(age.getMaximum(), new BigDecimal(99.0));
@@ -31,8 +35,8 @@ public void readBeanValidatorTest() {
3135
Assert.assertEquals((int) password.getMinLength(), 6);
3236
Assert.assertEquals((int) password.getMaxLength(), 20);
3337

34-
final StringSchema email = (StringSchema) properties.get("email");
35-
Assert.assertEquals((String) email.getPattern(), "(.+?)@(.+?)");
38+
final EmailSchema email = (EmailSchema) properties.get("email");
39+
Assert.assertEquals((String) email.getFormat(), "email");
3640

3741
final NumberSchema minBalance = (NumberSchema) properties.get("minBalance");
3842
Assert.assertTrue(minBalance.getExclusiveMinimum());

0 commit comments

Comments
 (0)