Skip to content

Commit 939f382

Browse files
jobaylefrantuma
authored andcommitted
Add support for jakarta.validation.constraints.Email
1 parent 082d1cb commit 939f382

File tree

3 files changed

+34
-3
lines changed

3 files changed

+34
-3
lines changed

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

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@
6565
import io.swagger.v3.oas.models.media.StringSchema;
6666
import io.swagger.v3.oas.models.media.UUIDSchema;
6767
import io.swagger.v3.oas.models.media.XML;
68+
import javax.validation.constraints.Email;
6869
import org.apache.commons.lang3.StringUtils;
6970
import org.apache.commons.lang3.math.NumberUtils;
7071
import org.slf4j.Logger;
@@ -1889,6 +1890,20 @@ protected boolean applyBeanValidatorAnnotations(Schema property, Annotation[] an
18891890
}
18901891
}
18911892
}
1893+
if (annos.containsKey("javax.validation.constraints.Email")) {
1894+
Email email = (Email) annos.get("javax.validation.constraints.Email");
1895+
boolean apply = checkGroupValidation(email.groups(), invocationGroups, acceptNoGroups);
1896+
if (apply) {
1897+
if (isStringSchema(property)) {
1898+
property.setFormat("email");
1899+
modified = true;
1900+
}
1901+
if (property.getItems() != null && isStringSchema(property.getItems())) {
1902+
property.getItems().setFormat("email");
1903+
modified = true;
1904+
}
1905+
}
1906+
}
18921907
if (validatorProcessor != null && validatorProcessor.getMode().equals(ValidatorProcessor.MODE.AFTER)) {
18931908
modified = validatorProcessor.applyBeanValidatorAnnotations(property, annotations, parent, applyNotNullAnnotations) || modified;
18941909
}
@@ -1999,6 +2014,16 @@ protected boolean applyBeanValidatorAnnotationsNoGroups(Schema property, Annotat
19992014
modified = true;
20002015
}
20012016
}
2017+
if (annos.containsKey("javax.validation.constraints.Email")) {
2018+
if (isStringSchema(property)) {
2019+
property.setFormat("email");
2020+
modified = true;
2021+
}
2022+
if (property.getItems() != null && isStringSchema(property.getItems())) {
2023+
property.getItems().setFormat("email");
2024+
modified = true;
2025+
}
2026+
}
20022027
return modified;
20032028
}
20042029

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)