如何在Spring中执行每个方法之前调用自定义验证

时间:2018-10-02 13:24:50

标签: java spring spring-boot java-8 spring-aop

我正在用jdk 8创建一个Spring Web应用程序,我的要求是

我想用UIImageView(image:myImage)注释其余的暴露方法 现在,我想编写一个通用的实用程序方法,该方法将针对通过注释的@isValid("bla-bla-bla")验证此方法所使用的Httprequest,失败时应返回HTTP 403

我知道我可以使用Aspect来做到这一点,我想知道是否有更好的方法可以实现相同的目标。

非常感谢

1 个答案:

答案 0 :(得分:1)

您可以这样编写您的自定义注释(这种情况可能不适合您,但我认为逻辑是相同的。)

@Target({ ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, 
ElementType.CONSTRUCTOR, ElementType.PARAMETER })
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = { MyValidator.class })
public @interface MyValidationAnnotation {

/**
 * @return
 */
String message() default "Your value is not valid";

/**
 * @return
 */
Class<?>[] groups() default {};

/**
 * @return
 */
Class<? extends Payload>[] payload() default {};

}

public class MyValidator implements ConstraintValidator<MyValidationAnnotation, String> {
public void initialize(MyValidationAnnotation constraintAnnotation) {
}

public boolean isValid(String id, ConstraintValidatorContext context) {
    //write your logic here..
    return true;
}

}

最后在需要的地方使用@MyValidationAnnotation。