如何在 Spring 中的每个方法执行之前调用自定义验证
How to call custom validation before each method execution in Spring
我正在使用 jdk 8 创建一个 spring 网络应用程序,我的要求是
我想用 @isValid("bla-bla-bla")
注释每个 rest 暴露的方法
现在我想写一个通用的实用方法,它将验证 Httprequest 来到这个方法反对 "bla-bla-bla"
在注释中传递,失败时应该 return HTTP 403
我知道我可以使用 Aspect 做到这一点,我想知道是否有更好的方法来实现同样的目标。
非常感谢
你可以这样写你的自定义注解(这个场景可能不适合你,但我认为逻辑是一样的。);
@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。
我正在使用 jdk 8 创建一个 spring 网络应用程序,我的要求是
我想用 @isValid("bla-bla-bla")
注释每个 rest 暴露的方法
现在我想写一个通用的实用方法,它将验证 Httprequest 来到这个方法反对 "bla-bla-bla"
在注释中传递,失败时应该 return HTTP 403
我知道我可以使用 Aspect 做到这一点,我想知道是否有更好的方法来实现同样的目标。
非常感谢
你可以这样写你的自定义注解(这个场景可能不适合你,但我认为逻辑是一样的。);
@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。