Skip to content

Commit baf422e

Browse files
mvc validation revisited
1 parent a470d9b commit baf422e

20 files changed

Lines changed: 213 additions & 177 deletions

File tree

modules/jooby-apt/pom.xml

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,17 @@
2828

2929
<dependency>
3030
<groupId>io.jooby</groupId>
31-
<artifactId>jooby-jakarta-validation</artifactId>
31+
<artifactId>jooby-validation</artifactId>
3232
<version>${jooby.version}</version>
3333
<scope>test</scope>
3434
</dependency>
3535

36+
<dependency>
37+
<groupId>jakarta.validation</groupId>
38+
<artifactId>jakarta.validation-api</artifactId>
39+
<scope>test</scope>
40+
</dependency>
41+
3642
<!-- Test dependencies -->
3743
<dependency>
3844
<groupId>com.google.testing.compile</groupId>

modules/jooby-hibernate-validator/pom.xml

Lines changed: 73 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121

2222
<dependency>
2323
<groupId>io.jooby</groupId>
24-
<artifactId>jooby-jakarta-validation</artifactId>
24+
<artifactId>jooby-validation</artifactId>
2525
<version>${jooby.version}</version>
2626
</dependency>
2727

@@ -43,5 +43,77 @@
4343
<artifactId>expressly</artifactId>
4444
<version>5.0.0</version>
4545
</dependency>
46+
47+
<!-- Test dependencies -->
48+
<dependency>
49+
<groupId>io.jooby</groupId>
50+
<artifactId>jooby-netty</artifactId>
51+
<version>${jooby.version}</version>
52+
<scope>test</scope>
53+
</dependency>
54+
<dependency>
55+
<groupId>io.jooby</groupId>
56+
<artifactId>jooby-jackson</artifactId>
57+
<version>${jooby.version}</version>
58+
<scope>test</scope>
59+
</dependency>
60+
61+
<dependency>
62+
<groupId>org.junit.jupiter</groupId>
63+
<artifactId>junit-jupiter-api</artifactId>
64+
<scope>test</scope>
65+
</dependency>
66+
67+
<dependency>
68+
<groupId>org.junit.jupiter</groupId>
69+
<artifactId>junit-jupiter-engine</artifactId>
70+
<scope>test</scope>
71+
</dependency>
72+
73+
<dependency>
74+
<groupId>io.jooby</groupId>
75+
<artifactId>jooby-test</artifactId>
76+
<version>${jooby.version}</version>
77+
<scope>test</scope>
78+
</dependency>
79+
80+
<dependency>
81+
<groupId>io.rest-assured</groupId>
82+
<artifactId>rest-assured</artifactId>
83+
<scope>test</scope>
84+
</dependency>
85+
86+
<dependency>
87+
<groupId>org.assertj</groupId>
88+
<artifactId>assertj-core</artifactId>
89+
<version>3.26.3</version>
90+
<scope>test</scope>
91+
</dependency>
4692
</dependencies>
93+
94+
<build>
95+
<plugins>
96+
<plugin>
97+
<groupId>org.apache.maven.plugins</groupId>
98+
<artifactId>maven-compiler-plugin</artifactId>
99+
<executions>
100+
<execution>
101+
<id>test</id>
102+
<phase>test-compile</phase>
103+
</execution>
104+
</executions>
105+
<configuration>
106+
<compilerArgs>
107+
<arg>-parameters</arg>
108+
</compilerArgs>
109+
<annotationProcessorPaths>
110+
<path>
111+
<groupId>io.jooby</groupId>
112+
<artifactId>jooby-apt</artifactId>
113+
</path>
114+
</annotationProcessorPaths>
115+
</configuration>
116+
</plugin>
117+
</plugins>
118+
</build>
47119
</project>

modules/jooby-jakarta-validation/src/main/java/io/jooby/validation/ConstraintViolationHandler.java renamed to modules/jooby-hibernate-validator/src/main/java/io/jooby/hibernate/validator/ConstraintViolationHandler.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1-
package io.jooby.validation;
1+
package io.jooby.hibernate.validator;
22

33
import edu.umd.cs.findbugs.annotations.NonNull;
44
import io.jooby.Context;
55
import io.jooby.ErrorHandler;
66
import io.jooby.StatusCode;
7+
import io.jooby.validation.ValidationResult;
78
import jakarta.validation.ConstraintViolation;
89
import jakarta.validation.ConstraintViolationException;
910

modules/jooby-hibernate-validator/src/main/java/io/jooby/hibernate/validator/HibernateValidatorModule.java

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,15 @@
99
import io.jooby.Extension;
1010
import io.jooby.Jooby;
1111
import io.jooby.StatusCode;
12-
import io.jooby.validation.ConstraintViolationHandler;
12+
import io.jooby.validation.MvcValidator;
13+
import jakarta.validation.ConstraintViolation;
1314
import jakarta.validation.ConstraintViolationException;
1415
import jakarta.validation.Validator;
1516
import jakarta.validation.ValidatorFactory;
1617
import org.hibernate.validator.HibernateValidator;
1718
import org.hibernate.validator.HibernateValidatorConfiguration;
1819

20+
import java.util.Set;
1921
import java.util.function.Consumer;
2022

2123
import static jakarta.validation.Validation.byProvider;
@@ -87,10 +89,28 @@ public void install(@NonNull Jooby app) {
8789
try (ValidatorFactory factory = cfg.buildValidatorFactory()) {
8890
Validator validator = factory.getValidator();
8991
app.getServices().put(Validator.class, validator);
92+
app.getServices().put(MvcValidator.class, new MvcValidatorImpl(validator));
9093

9194
if (!disableDefaultViolationHandler) {
9295
app.error(ConstraintViolationException.class, new ConstraintViolationHandler(statusCode, title));
9396
}
9497
}
9598
}
99+
100+
static class MvcValidatorImpl implements MvcValidator<ConstraintViolationException> {
101+
102+
private final Validator validator;
103+
104+
MvcValidatorImpl(Validator validator) {
105+
this.validator = validator;
106+
}
107+
108+
@Override
109+
public void validate(Object bean) {
110+
Set<ConstraintViolation<Object>> violations = validator.validate(bean);
111+
if (!violations.isEmpty()) {
112+
throw new ConstraintViolationException(violations);
113+
}
114+
}
115+
}
96116
}

modules/jooby-jakarta-validation/src/test/java/io/jooby/validation/BeanValidatorTest.java renamed to modules/jooby-hibernate-validator/src/test/java/io/jooby/hibernate/validator/HibernateValidatorModuleTest.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1-
package io.jooby.validation;
1+
package io.jooby.hibernate.validator;
22

3+
import io.jooby.hibernate.validator.app.App;
4+
import io.jooby.hibernate.validator.app.NewAccountRequest;
5+
import io.jooby.hibernate.validator.app.Person;
36
import io.jooby.test.JoobyTest;
4-
import io.jooby.validation.app.App;
5-
import io.jooby.validation.app.NewAccountRequest;
6-
import io.jooby.validation.app.Person;
7+
import io.jooby.validation.ValidationResult;
78
import io.restassured.RestAssured;
89
import io.restassured.builder.RequestSpecBuilder;
910
import io.restassured.http.ContentType;
@@ -16,11 +17,11 @@
1617
import java.util.Map;
1718

1819
import static io.jooby.StatusCode.UNPROCESSABLE_ENTITY_CODE;
19-
import static io.jooby.validation.app.App.DEFAULT_TITLE;
20+
import static io.jooby.hibernate.validator.app.App.DEFAULT_TITLE;
2021
import static io.restassured.RestAssured.given;
2122

2223
@JoobyTest(value = App.class, port = 8099)
23-
public class BeanValidatorTest {
24+
public class HibernateValidatorModuleTest {
2425

2526
protected static RequestSpecification SPEC = new RequestSpecBuilder()
2627
.setPort(8099)
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package io.jooby.hibernate.validator.app;
2+
3+
import io.jooby.Jooby;
4+
import io.jooby.StatusCode;
5+
import io.jooby.hibernate.validator.ConstraintViolationHandler;
6+
import io.jooby.hibernate.validator.HibernateValidatorModule;
7+
import io.jooby.jackson.JacksonModule;
8+
import jakarta.validation.ConstraintViolationException;
9+
10+
public class App extends Jooby {
11+
12+
private static final StatusCode STATUS_CODE = StatusCode.UNPROCESSABLE_ENTITY;
13+
public static final String DEFAULT_TITLE = "Validation failed";
14+
15+
{
16+
install(new JacksonModule());
17+
install(new HibernateValidatorModule());
18+
19+
mvc(new Controller());
20+
21+
error(ConstraintViolationException.class, new ConstraintViolationHandler(STATUS_CODE, DEFAULT_TITLE));
22+
}
23+
24+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package io.jooby.hibernate.validator.app;
2+
3+
import io.jooby.annotation.POST;
4+
import io.jooby.annotation.Path;
5+
import jakarta.validation.Valid;
6+
7+
import java.util.List;
8+
import java.util.Map;
9+
10+
@Path("")
11+
public class Controller {
12+
13+
@POST("/create-person")
14+
public void createPerson(@Valid Person person) {
15+
}
16+
17+
@POST("/create-array-of-persons")
18+
public void createArrayOfPersons(@Valid Person[] persons) {
19+
}
20+
21+
@POST("/create-list-of-persons")
22+
public void createListOfPersons(@Valid List<Person> persons) {
23+
}
24+
25+
@POST("/create-map-of-persons")
26+
public void createMapOfPersons(@Valid Map<String, Person> persons) {
27+
}
28+
29+
@POST("/create-new-account")
30+
public void createNewAccount(@Valid NewAccountRequest request) {
31+
}
32+
}

modules/jooby-jakarta-validation/src/test/java/io/jooby/validation/app/NewAccountRequest.java renamed to modules/jooby-hibernate-validator/src/test/java/io/jooby/hibernate/validator/app/NewAccountRequest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package io.jooby.validation.app;
1+
package io.jooby.hibernate.validator.app;
22

33
import jakarta.validation.Valid;
44
import jakarta.validation.constraints.NotEmpty;

modules/jooby-jakarta-validation/src/test/java/io/jooby/validation/app/PasswordsShouldMatch.java renamed to modules/jooby-hibernate-validator/src/test/java/io/jooby/hibernate/validator/app/PasswordsShouldMatch.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package io.jooby.validation.app;
1+
package io.jooby.hibernate.validator.app;
22

33
import jakarta.validation.Constraint;
44
import jakarta.validation.Payload;

modules/jooby-jakarta-validation/src/test/java/io/jooby/validation/app/PasswordsShouldMatchValidator.java renamed to modules/jooby-hibernate-validator/src/test/java/io/jooby/hibernate/validator/app/PasswordsShouldMatchValidator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package io.jooby.validation.app;
1+
package io.jooby.hibernate.validator.app;
22

33
import jakarta.validation.ConstraintValidator;
44
import jakarta.validation.ConstraintValidatorContext;

0 commit comments

Comments
 (0)