Skip to content

Bug Report: Hibernate Validator Not Working in Script/Lambda Mode (BeanValidator.validate(...)) #3751

Description

@kangmind

🐛 Bug Report: Hibernate Validator Not Working in Script/Lambda Mode (BeanValidator.validate(...))

Version: Jooby 4.0.4
Mode: Script/Lambda (extends Jooby)
Modules Used:


✅ 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

  1. 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;
    

    }

  2. ❌ Failing Handler Using BeanValidator.validate(...)

    post("/v1", BeanValidator.validate(ctx -> {
    UserDto userDto = ctx.body(UserDto.class);
    ...
    }));

  3. ✅ 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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

      Milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions