|
9 | 9 | import io.jooby.Extension; |
10 | 10 | import io.jooby.Jooby; |
11 | 11 | import io.jooby.StatusCode; |
12 | | -import io.jooby.validation.ConstraintViolationHandler; |
| 12 | +import io.jooby.validation.MvcValidator; |
| 13 | +import jakarta.validation.ConstraintViolation; |
13 | 14 | import jakarta.validation.ConstraintViolationException; |
14 | 15 | import jakarta.validation.Validator; |
15 | 16 | import jakarta.validation.ValidatorFactory; |
16 | 17 | import org.hibernate.validator.HibernateValidator; |
17 | 18 | import org.hibernate.validator.HibernateValidatorConfiguration; |
18 | 19 |
|
| 20 | +import java.util.Set; |
19 | 21 | import java.util.function.Consumer; |
20 | 22 |
|
21 | 23 | import static jakarta.validation.Validation.byProvider; |
@@ -87,10 +89,28 @@ public void install(@NonNull Jooby app) { |
87 | 89 | try (ValidatorFactory factory = cfg.buildValidatorFactory()) { |
88 | 90 | Validator validator = factory.getValidator(); |
89 | 91 | app.getServices().put(Validator.class, validator); |
| 92 | + app.getServices().put(MvcValidator.class, new MvcValidatorImpl(validator)); |
90 | 93 |
|
91 | 94 | if (!disableDefaultViolationHandler) { |
92 | 95 | app.error(ConstraintViolationException.class, new ConstraintViolationHandler(statusCode, title)); |
93 | 96 | } |
94 | 97 | } |
95 | 98 | } |
| 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 | + } |
96 | 116 | } |
0 commit comments