Skip to content

Commit 951a459

Browse files
Merge remote-tracking branch 'origin/feat/jooby-hbv' into feat/jooby-hbv
# Conflicts: # modules/jooby-hbv/pom.xml # modules/jooby-hbv/src/main/java/io/jooby/hbv/HbvModule.java
2 parents 7adc2a2 + daca727 commit 951a459

4 files changed

Lines changed: 41 additions & 6 deletions

File tree

jooby/pom.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,12 @@
4949
<artifactId>jakarta.inject-api</artifactId>
5050
</dependency>
5151

52+
<!-- jakarta.validation -->
53+
<dependency>
54+
<groupId>jakarta.validation</groupId>
55+
<artifactId>jakarta.validation-api</artifactId>
56+
</dependency>
57+
5258
<!-- config -->
5359
<dependency>
5460
<groupId>com.typesafe</groupId>

jooby/src/main/java/io/jooby/DefaultContext.java

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,12 @@
2020
import java.nio.charset.StandardCharsets;
2121
import java.nio.file.Path;
2222
import java.time.Instant;
23-
import java.util.Date;
24-
import java.util.List;
25-
import java.util.Map;
26-
import java.util.Objects;
27-
import java.util.Optional;
23+
import java.util.*;
2824
import java.util.stream.Collectors;
2925

26+
import jakarta.validation.ConstraintViolation;
27+
import jakarta.validation.ConstraintViolationException;
28+
import jakarta.validation.Validator;
3029
import org.slf4j.Logger;
3130

3231
import edu.umd.cs.findbugs.annotations.NonNull;
@@ -417,7 +416,20 @@ default boolean isSecure() {
417416
T result = ValueConverters.convert(body(), type, getRouter());
418417
return result;
419418
}
420-
return (T) decoder(contentType).decode(this, type);
419+
T object = (T) decoder(contentType).decode(this, type);
420+
421+
MessageValidator messageValidator = getRouter().getMessageValidator();
422+
if (messageValidator != null) {
423+
if (messageValidator.predicate().test(type)) {
424+
Validator validator = messageValidator.validator();
425+
Set<ConstraintViolation<T>> violations = validator.validate(object);
426+
if (!violations.isEmpty()) {
427+
throw new ConstraintViolationException(violations);
428+
}
429+
}
430+
}
431+
return object;
432+
421433
} catch (Exception x) {
422434
throw SneakyThrows.propagate(x);
423435
}

jooby/src/main/java/io/jooby/internal/RouterImpl.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import static java.util.Objects.requireNonNull;
99

1010
import java.io.FileNotFoundException;
11+
import java.lang.reflect.Type;
1112
import java.nio.charset.StandardCharsets;
1213
import java.nio.file.NoSuchFileException;
1314
import java.nio.file.Path;
@@ -35,6 +36,7 @@
3536
import java.util.stream.IntStream;
3637
import java.util.stream.Stream;
3738

39+
import jakarta.validation.Validator;
3840
import org.slf4j.Logger;
3941
import org.slf4j.LoggerFactory;
4042

@@ -147,6 +149,8 @@ public Stack executor(Executor executor) {
147149

148150
private Map<String, MessageDecoder> decoders = new HashMap<>();
149151

152+
private MessageValidator messageValidator = null;
153+
150154
private Map<String, Object> attributes = new ConcurrentHashMap<>();
151155

152156
private ServiceRegistry services = new ServiceRegistryImpl();
@@ -368,6 +372,18 @@ public Router decoder(@NonNull MediaType contentType, @NonNull MessageDecoder de
368372
return this;
369373
}
370374

375+
@NonNull
376+
@Override
377+
public Router messageValidator(@NonNull Validator validator, @NonNull Predicate<Type> predicate) {
378+
this.messageValidator = new MessageValidator(validator, predicate);
379+
return this;
380+
}
381+
382+
@Override
383+
public MessageValidator getMessageValidator() {
384+
return messageValidator;
385+
}
386+
371387
@NonNull @Override
372388
public Executor getWorker() {
373389
return worker;

modules/pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@
5858
<module>jooby-thymeleaf</module>
5959
<module>jooby-node</module>
6060
<module>jooby-camel</module>
61+
<module>jooby-hbv</module>
6162

6263
<!-- validation -->
6364
<module>jooby-validation</module>

0 commit comments

Comments
 (0)