-
-
Notifications
You must be signed in to change notification settings - Fork 202
Description
π Bug Report: Hibernate Validator Not Working in Script/Lambda Mode (BeanValidator.validate(...))
Version: Jooby 4.0.4
Mode: Script/Lambda (extends Jooby)
Modules Used:
- jooby-hibernate-validator
- jooby-guice
Reference:
https://jooby.io/modules/hibernate-validator/#hibernate-validator-hibernate-integration
β Expected Behavior
Using the documented method:
post("/v1", BeanValidator.validate(ctx -> {
UserDto userDto = ctx.body(UserDto.class);
...
}));
should automatically validate the UserDto object using
jakarta.validation annotations, e.g., @notblank, and return validation
errors only if fields are invalid.
β Actual Behavior
Even when all required fields are provided and valid, the validator
returns errors like:
{
"title": "Validation failed",
"status": 422,
"errors": [
{
"field": "password",
"messages": ["password can not empty"],
"type": "FIELD"
},
{
"field": "username",
"messages": ["username can not empty"],
"type": "FIELD"
}
]
}
This does not happen if I manually validate the object.
π§ͺ Reproduction
-
DTO Class
package app.domain.user;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;@DaTa
public class UserDto {
@notblank(message = "username can not empty")
private String username;@NotBlank(message = "password can not empty") private String password;}
-
β Failing Handler Using BeanValidator.validate(...)
post("/v1", BeanValidator.validate(ctx -> {
UserDto userDto = ctx.body(UserDto.class);
...
})); -
β Working Handler Using Manual Validation
post("/v2", ctx -> {
UserDto userDto = ctx.body(UserDto.class);Validator validator = require(Validator.class); Set<ConstraintViolation<UserDto>> violations = validator.validate(userDto); if (!violations.isEmpty()) { for (ConstraintViolation<UserDto> v : violations) { throw new StatusCodeException(StatusCode.BAD_REQUEST, v.getPropertyPath() + " " + v.getMessage()); } } ...});
β Conclusion
- Validation annotations work correctly with manual validation
- But fail incorrectly using the documented
BeanValidator.validate(...) approach in script/lambda mode - This appears to be a bug specific to jooby-hibernate-validator
integration in non-MVC mode