【发布时间】:2021-09-28 09:54:31
【问题描述】:
假设我有一个非常简单的Book 模型,我想验证它的标题不为空。
public class Book {
@NotBlank
public String title;
}
在服务层我执行这样的验证(使用 Hibernate 验证器quarkus-hibernate-validator):
public class BookService {
public void validateBook(@Valid Book book) {
// your business logic here
}
}
我的资源是:
@Path("/books")
public class BookResource {
@Inject
BookService bookService;
@Path("/service-method-validation")
@POST
public String tryServiceMethodValidation(Book book) {
try {
bookService.validateBook(book);
return "Book is valid! It was validated by service method validation.";
} catch (ConstraintViolationException e) {
return "Book invalid";
}
}
@Path("/private-method-validation")
@POST
public String tryMethodValidation(MessedTitleBook book) {
try {
Book book = translate_title(book);
method(book);
return "Book is valid! It was validated by method validation.";
} catch (ConstraintViolationException e) {
return "Book invalid";
}
}
private void method(@Valid Book book) {
// your method logic here
}
}
当我在/service-method-validation 上发布Book 时,一切正常,服务方法会检查我的book 是否存在违规行为。
现在假设我有第二个端点 (/method-validation),它接收另一个对象 MessedTitleBook,(将其视为在标题中嵌入作者的书)我需要在其上执行翻译删除作者,然后将该书传递给私有方法以执行某些操作。在私有方法中,我需要检查翻译的书是否有效,但 @Valid 注释似乎不适用于私有方法。
问题:
-
@Valid是否适用于私有方法?如果没有,请提供我学习的资源。 - 有没有办法自动实现验证而无需手动验证,即注入
validator并执行validator.validate(book)?
编辑
我忘了提到将方法范围从私有更改为公共可以使验证工作。
【问题讨论】:
标签: java quarkus hibernate-validator