【问题标题】:Java custom validation annotationJava 自定义验证注解
【发布时间】:2018-10-25 10:55:32
【问题描述】:
    public class Student{
    @NotNull
    private Course course= null;

    @CustomValidation(enumCourse = course)
    private String details = null;
    }
}

如何将课程变量传递给 CustomValidation 注释?我收到一条错误消息,说 course 必须是枚举常量表达式。

我也写了一个自定义的验证接口和验证器。

【问题讨论】:

    标签: java spring-mvc annotations


    【解决方案1】:

    注解属性在编译时必须保持不变。

    你不能在那里使用变量。

    这里的关键字是cross fields validation

    你有两个选择:

    1. 在类级别创建注释。在那里你可以访问类的所有属性并且验证应该很容易完成
    2. 或者在方法级别创建注释,返回所有必要的验证字段。

      @CustomAnnotations
      Pair<Course, String> getCourseAndDetailForValidation() {
         return Pair.of(course, details)
      }
      

      您可以根据自己的喜好更改返回类型,它可能是 List、Array、包装器对象...

    【讨论】:

    • 如何将此方法传递给@CustomValidation(enumCourse = course)?
    • 您了解自定义验证吗?一旦你用@CustomAnnotation 注释了你的方法,在你的CustomAnnotationValidator.java 类中,你就可以在isValid() 方法中访问这些属性(coursedetails),你可以在那里实现你的逻辑
    【解决方案2】:

    它由 JLS 的第 9.6.1 节指定。注释成员类型必须是以下之一:

    原始的 细绳 班级 一个枚举 另一个注解 上述任何一项的数组

    课程必须是其中一种类型。

    【讨论】:

      猜你喜欢
      • 2021-09-18
      • 2011-06-13
      • 1970-01-01
      • 2014-09-24
      • 1970-01-01
      • 2015-10-02
      • 2016-10-05
      • 2014-01-13
      • 1970-01-01
      相关资源
      最近更新 更多