java - 如何使用包含存储库 bean 的自定义验证器注释来验证 @PathVariable
问题描述
我知道如何@PathVariable
从https://stackoverflow.com/a/35404423/4800811进行验证
,它使用标准注释按预期工作,但使用存储库 bean 的自定义注释不能正常工作。也许 bean 没有初始化,我最终NullPointerException
在访问端点时得到@PathVariable
验证。那么如何获得这项工作呢?
我的控制器:
@RestController
@Validated
public class CustomerGroupController {
@PutMapping(value = "/deactive/{id}")
public HttpEntity<UpdateResult> deactive(@PathVariable @CustomerGroupEmpty String id) {
}
}
我的自定义验证器:
public class CustomerGroupEmptyValidator implements ConstraintValidator<CustomerGroupEmpty, String>{
@Autowired
private CustomerRepository repository;
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
// NullPointerException here (repository == null)
if (value!=null && !repository.existsByCustomerGroup(value)) {
return false;
}
return true;
}
}
我的自定义注释:
@Documented
@Constraint(validatedBy = CustomerGroupEmptyValidator.class)
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
public @interface CustomerGroupEmpty {
String message() default "The customer group is not empty.";
Class<?>[] groups() default {};
Class<? extends Payload> [] payload() default {};
}
解决方案
这篇文章中的代码是正确的,唯一的错误是验证器也需要覆盖初始化方法。可能是 user123 错误配置存储库 bean,检查这个的简单方法是在配置类中手动定义它
推荐阅读
- flutter - W/FlutterActivityAndFragmentDelegate(27114):向 Flutter 提供了启动画面,但不推荐使用
- python - 在 python 中使用拟合数据有效求解超定非线性方程组
- python - 指数函数实现
- python-3.x - 如何创建并行处理以使多个进程进行下载和写入?
- python - 是否有函数或方法可以返回 Python 中列表或字符串中字符的位置值?
- typescript - 如何查询和改变表中的“多对多”字段?
- command - 如何通过命令提示符打开D盘中的文件
- c - 在 Linux 内核上执行 mmap
- php - 如果我在课堂上开很多课,我的项目会变慢吗?
- julia - 在 Julia 中创建唯一符号,类似于 Mathematica 的 `Unique[]`