java - Spring方法级验证器
问题描述
我想验证两个论点是否getCategories()
满足我的期望。我创建了一个验证器:
@Constraint(validatedBy = EnvironmentIdValidator.class)
@Target({METHOD, CONSTRUCTOR})
@Retention(RUNTIME)
@Documented
public @interface IEnvironmentIdValidator {
String message() default "Invalid environment ID.";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
String[] value();
}
和实施:
@SupportedValidationTarget(ValidationTarget.PARAMETERS)
public class EnvironmentIdValidator implements ConstraintValidator<IEnvironmentIdValidator,Object[]> {
@Override
public void initialize(IEnvironmentIdValidator constraintAnnotation) {
// logic
}
@Override
public boolean isValid(Object[] object, ConstraintValidatorContext constraintValidatorContext) {
// logic
}
}
我在带有注释的端点之一调用此验证器,同时传递两个参数。
@IEnvironmentIdValidator(value = {"environmentID", "requestAuthorizationHeader"})
public ResponseEntity<?> getCategories(@PathVariable(name = "environmentID") Long environmentID,
@RequestHeader("Authorization") String requestAuthorizationHeader) {
//...
}
但不幸的是,验证器没有被触发。我可能做错了什么?
解决方案
您的控制器必须使用@Validated 进行注释,否则您的 bean 将不会附加自定义验证。
//...
import org.springframework.validation.annotation.Validated;
@Controller
@Validated
public class MyController {
@IEnvironmentIdValidator
@GetMapping("/test/{environmentID}")
public ResponseEntity<?> getCategories(@PathVariable(name = "environmentID") Long environmentID,
@RequestHeader("Authorization") String requestAuthorizationHeader) {
//...
推荐阅读
- c# - 将非常高质量的文本渲染到位图
- javascript - Node.JS 和 Vue.JS 发布操作
- java - Flux next() 导致性能不佳
- ios - Xcode:UIButton setImage 不会改变按钮的图像
- include - 我可以多次包含一个用例..真的吗?
- python - 如何删除所有不和谐角色?
- webpack - 如何使 scss / sass / css-loader 无法解析 url 调用?(在 WebPack 内)
- react-native - 聚焦功能组件中的下一个输入字段反应原生
- laravel - 多服务器中的laravel队列
- php - 如何遍历对象数组并从特定对象中获取值?