当前位置: 首页 > 面试题库 >

JSR303。验证方法参数并引发异常

晏修诚
2023-03-14
问题内容

如果参数无效,如何使用JSR-303验证方法参数并引发异常?

例如像这样:public void createUser(@ValidOrThrowException User user) {...}

现在,我检查方法主体中的每个方法参数,例如

public void createUser(User user) {
    ConstraintViolations violations = Validator.validate(user);
    if (!violations.isEmpty()) {
        throw new IllegalArgumentException(createExceptionMessage(violations ));
    }
    ...//business logic
}

而且我觉得这很丑。

PS作为参考实现,我使用Hibernate-validator 4.1.0.Final


问题答案:

如果可以升级到Hibernate Validator
4.2.0或更高版本,则可以使用其方法验证功能,该功能为方法参数和返回值的验证提供支持。

可以使用动态代理,AOP,拦截器等方法在约束方法调用后自动调用验证引擎。根据所使用的框架,您可以使用例如以下一种方法:

  • 使用Spring 3.1或更高版本时:MethodValidationInterceptor
  • 使用CDI时:Seam Validation(免责声明:我是本文的作者)
  • 使用Guice时:在GitHub上添加了一个示例

请注意,从Bean Validation
1.1
(即将完成)及其参考实现Hibernate Validator
5开始,方法验证将成为标准化Bean Validation API的一部分。



 类似资料:
  • 本文向大家介绍Spring Boot利用JSR303实现参数验证的方法实例,包括了Spring Boot利用JSR303实现参数验证的方法实例的使用技巧和注意事项,需要的朋友参考一下 简介 JSR-303 是 JAVA EE 6 中的一项子规范,叫做 Bean Validation。 在任何时候,当你要处理一个应用程序的业务逻辑,数据校验是你必须要考虑和面对的事情。应用程序必须通过某种手段来确保输

  • 当我尝试测试此方法时 使用以下测试   也是如此。 是否可以使用AssertJ测试静态方法实际上抛出未检查的异常?我应该在考试中改变什么?

  • 最近,在一次代码审查中,一位同事说“测试不应该有try-catch块”。他还向我指出了关于的信息,我可以使用它重写对异常数据执行检查的一些测试。 然而,我遇到了一种情况,我不确定我是否能消除试捕。我正在为一个方法编写单元测试,该方法将抛出一个异常,并执行一些我需要使用JMockit验证的行为。假设测试中的代码包含如下内容 JUnit测试当前看起来像 我找不到摆脱试捕的好方法。就我个人而言,我不认为

  • 问题内容: 在我的使用Mockito的单元测试中,我想验证未抛出该异常。 我的测试设置了,设置了对象和属性,以便该方法将抛出。 我 确认 从未调用过Calling.method()。 我想要测试失败,因为它抛出,然后我想编写一些代码来解决此问题。 我注意到的是,测试始终会通过,因为永远不会抛出异常。 问题答案: tl; dr JDK8之后:使用 AssertJ 或自定义lambda来声明 异常 行

  • 我正在创建一个Spring Boot项目来测试我的rest API(非常非常小的项目)。该项目包含三个文件。 1)app.java(主程序)2)AppConfig(配置文件)3)主控制器(简单Rest控制器) 我添加了Spring-boot-starter-parent(1.4.0.release)和spring-boot-starter-web作为依赖项。 但是在执行时,会得到如下所示的异常。

  • 我按照这个教程https://spring framework . guru/spring-boot-restful-API-documentation-with-swagger-2/生成了一个swagger文档。它可以工作,但是当我试图在bean中添加一些验证时,我在文档中找不到信息: 带有验证注释的我的实体: 这里,https://github.com/springfox/springfox/