[英]How to validate @PathVariable with custom validator annotation containing repository bean
我知道如何從https://stackoverflow.com/a/35404423/4800811驗證@PathVariable
並且它與標准注釋一起按預期工作,但不能與使用存儲庫 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 {};
}
這篇文章中的代碼是正確的,唯一的錯誤是驗證器也需要覆蓋 initialize 方法。 可能 user123 不正確配置存儲庫 bean,檢查這個的簡單方法是在配置類中手動定義它
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.