Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/feat/jooby-hbv' into feat/jooby-hbv
Browse files Browse the repository at this point in the history
# Conflicts:
#	modules/jooby-hbv/pom.xml
#	modules/jooby-hbv/src/main/java/io/jooby/hbv/HbvModule.java
  • Loading branch information
kliushnichenko committed Aug 24, 2024
2 parents 7adc2a2 + daca727 commit 951a459
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 6 deletions.
6 changes: 6 additions & 0 deletions jooby/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,12 @@
<artifactId>jakarta.inject-api</artifactId>
</dependency>

<!-- jakarta.validation -->
<dependency>
<groupId>jakarta.validation</groupId>
<artifactId>jakarta.validation-api</artifactId>
</dependency>

<!-- config -->
<dependency>
<groupId>com.typesafe</groupId>
Expand Down
24 changes: 18 additions & 6 deletions jooby/src/main/java/io/jooby/DefaultContext.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,12 @@
import java.nio.charset.StandardCharsets;
import java.nio.file.Path;
import java.time.Instant;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.*;
import java.util.stream.Collectors;

import jakarta.validation.ConstraintViolation;
import jakarta.validation.ConstraintViolationException;
import jakarta.validation.Validator;
import org.slf4j.Logger;

import edu.umd.cs.findbugs.annotations.NonNull;
Expand Down Expand Up @@ -417,7 +416,20 @@ default boolean isSecure() {
T result = ValueConverters.convert(body(), type, getRouter());
return result;
}
return (T) decoder(contentType).decode(this, type);
T object = (T) decoder(contentType).decode(this, type);

MessageValidator messageValidator = getRouter().getMessageValidator();
if (messageValidator != null) {
if (messageValidator.predicate().test(type)) {
Validator validator = messageValidator.validator();
Set<ConstraintViolation<T>> violations = validator.validate(object);
if (!violations.isEmpty()) {
throw new ConstraintViolationException(violations);
}
}
}
return object;

} catch (Exception x) {
throw SneakyThrows.propagate(x);
}
Expand Down
16 changes: 16 additions & 0 deletions jooby/src/main/java/io/jooby/internal/RouterImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import static java.util.Objects.requireNonNull;

import java.io.FileNotFoundException;
import java.lang.reflect.Type;
import java.nio.charset.StandardCharsets;
import java.nio.file.NoSuchFileException;
import java.nio.file.Path;
Expand Down Expand Up @@ -35,6 +36,7 @@
import java.util.stream.IntStream;
import java.util.stream.Stream;

import jakarta.validation.Validator;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

Expand Down Expand Up @@ -147,6 +149,8 @@ public Stack executor(Executor executor) {

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

private MessageValidator messageValidator = null;

private Map<String, Object> attributes = new ConcurrentHashMap<>();

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

@NonNull
@Override
public Router messageValidator(@NonNull Validator validator, @NonNull Predicate<Type> predicate) {
this.messageValidator = new MessageValidator(validator, predicate);
return this;
}

@Override
public MessageValidator getMessageValidator() {
return messageValidator;
}

@NonNull @Override
public Executor getWorker() {
return worker;
Expand Down
1 change: 1 addition & 0 deletions modules/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@
<module>jooby-thymeleaf</module>
<module>jooby-node</module>
<module>jooby-camel</module>
<module>jooby-hbv</module>

<!-- validation -->
<module>jooby-validation</module>
Expand Down

0 comments on commit 951a459

Please sign in to comment.