簡體   English   中英

如何使用包含存儲庫 bean 的自定義驗證器注釋驗證 @PathVariable

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM