jsr303 spring_使用Spring和JSR 303进行方法参数验证

我就是我 2023-02-25 03:59 160阅读 0赞

jsr303 spring

Spring提供了一种使用JSR 303 bean验证来验证方法参数的简便方法。 在这篇文章中,我们将看到如何使用此功能。

建立

首先,我们需要通过创建MethodValidationPostProcessor bean添加对方法参数验证的支持:

  1. @Configuration public class MyConfiguration {
  2. @Bean
  3. public MethodValidationPostProcessor methodValidationPostProcessor() {
  4. return new MethodValidationPostProcessor();
  5. } }

验证方法参数

注册MethodValidationPostProcessor之后,我们可以通过添加@Validated批注来启用每个bean的方法参数验证。 现在,我们可以将Java Bean验证批注添加到方法参数中以执行验证。

  1. @Service @Validated public class UserService {
  2. public User getUser( @NotBlank String uuid) {
  3. ...
  4. } }

在这里,我们添加了@NotBlank批注,以确保传递的uuid参数不为null或为空字符串。 每当传递无效的uuid时,都会引发ContraintViolationException。

除了简单的参数验证之外,我们还可以验证带有JSR 303注释的对象。

例如:

  1. public class User {
  2. @NotBlank
  3. private String name;
  4. // getter + setter }
  5. @Service @Validated public class UserService {
  6. public void createUser( @Valid User user) {
  7. ...
  8. } }

通过添加@Valid(不是@Validated),我们将用户参数标记为验证。 然后将根据User类中定义的验证约束来验证传递的用户对象。 在此,名称字段不应为null或包含空字符串。

这是如何运作的?

我们注册的MethodValidationPostProcessor Bean是一个BeanPostProcessor,它检查每个Bean是否被@Validated注释。 如果是这样,它将添加一个AOP拦截器( MethodValidationInterceptor )来拦截方法调用并执行验证。 仅当验证成功时才调用实际的bean方法。

因为此功能依赖于AOP拦截器,所以它仅适用于spring bean。

与往常一样,您可以在GitHub上找到所示示例的源。

翻译自: https://www.javacodegeeks.com/2020/01/method-parameter-validation-with-spring-and-jsr-303.html

jsr303 spring

发表评论

表情:
评论列表 (有 0 条评论,160人围观)

还没有评论,来说两句吧...

相关阅读

    相关 JSR-303

    请求参数的校验是很多新手开发非常容易犯错,或存在较多改进点的常见场景。比较常见的问题主要表现在以下几个方面: 仅依靠前端框架解决参数校验,缺失服务端的校验。这种情况常见

    相关 JSR303

    JSR303 作用 大概步骤 因为以后要处理的异常很多,所以做一个统一的异常处理:@ControllerAdvice 作用 往往我们会在前端进行

    相关 JSR303使用

    验证方式 用户在前端页面上填写表单时,前端js程序会校验参数的合法性 当数据到了后端,为了防止恶意操作,保持程序的健壮性 后端同样需要对数据进行校验 JSR30