当前位置: 首页 > 知识库问答 >
问题:

私有方法上的Javax验证不会被触发

上官鸿晖
2023-03-14

假设我有一个非常简单的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
    }
}
    null

编辑
我忘了提到,将方法范围从private更改为public可以使验证工作。

共有1个答案

子车海
2023-03-14

我不能保证这是您使用的库的100%正确答案,但我会继续假设它的工作方式类似于Spring处理此类验证的方式。

对你问题的简短回答1。:不,它不起作用。

这种验证通常是通过AOP代理实例的概念来处理的,它围绕着实际的对象实例并拦截对它的所有调用,这种方式能够在将调用传递给实际的对象实例之前向执行添加额外的逻辑,比如验证参数。这意味着AOP代理实例将(并且应该)只能处理类的公共接口。

 类似资料:
  • 我正在尝试验证表单字段集的输入值,并在发生无效输入时使Thymeleaf显示一些错误消息。但不知何故,以下Thymeleaf命令从未以正确的方式得到解决: 关于我的环境的更多信息,我想不会有什么坏处: 根据Spring GS指南“验证表单输入”,我实现了相关的控制器方法,如下所示: 控制器: 当我向控制器提交无效的表单输入时,它会根据需要运行if子句,这样打印log.infos并再次返回相同的页面

  • 我对Spring靴有疑问。如何对Spring转换器进行验证?我试图从javax使用ConstraintValidator,但它在转换器之后运行。

  • 正如标题所说,我根本无法让Quartz.net工作。我从NuGet获得了最新版本的Quartz.net(2.2.1)、Common.Logging(2.1.2)、Common.Logging.NLog(2.0.0)和NLog(2.1.0)。触发器没有被触发,而且石英绝对没有记录任何东西。我猜我搞砸了配置。 我的应用程序配置: 有一个作业和一个触发器与之相关: 调度程序将启动,作业和触发器将正确添加

  • 将Spring框架更新到5.1.5后。从4.3.2发布。发布,我得到一个错误: 我花了两天时间寻找可能的解决方案,但我没有找到任何帮助。 整个消息: 父项目pom: 主题项目Pom: 非常感谢!

  • 我使用的是不可变的。org库,并希望添加Javax注释验证。但是我注意到验证没有被带到生成的类中。我认为这是不变的。org与验证注释兼容。我有spring boot starter验证和javax。验证依赖项。 不可变的 控制器: pom。xml

  • (仅在测试中使用)我有依赖项(没有spring或DI容器) 我可以通过 myDto在哪里 哪里 哪里 在这个验证器中,所有的工作都很完美,但没有任何注释或在现场发挥作用,他们只是被忽略了 请帮忙。断然的 很抱歉,我的真实案例是相互嵌套的DTO,所以只有高级类经过验证,但没有嵌套。 而另一个有注释的字段未经验证。当我在字段中添加时,它开始正常工作