8

Đây là trình xác thực tùy chỉnh của tôi kiểm tra một số trường sẵn có. UserRepository là null, do đó trình xác thực không được tiêm nó.Trình khởi động hạn chế tùy chỉnh khởi động mùa xuân không được tiêm dịch vụ

public class AvailableValidator implements ConstraintValidator<Available,String> { 

    @Autowired 
    private UserRepository userRepository; 

    private Available.Field type; 

    public void initialize(Available usernameAvailable) { 
     this.type = usernameAvailable.type(); 
    } 

    public boolean isValid(String s, ConstraintValidatorContext constraintValidatorContext) { 
     if (userRepository == null) System.out.println("\n\n------USER REPOSITORY IS NULL-------\n\n"); 


     switch (type){ 
      case EMAIL: 
       return userRepository.findByEmail(s)==null; 
      case NUMBER: 
       return userRepository.findByNumber(s)==null; 
      case NAME: 
       return userRepository.findByName(s)==null; 
      default: 
       return false; 
     } 
    } 
} 

Tôi đã đọc các chủ đề tương tự mà tôi phải thiết lập nhà máy xác thực. Tôi đã thực hiện điều này:

@SpringBootApplication 
public class Application { 

    public static void main(String[] args){ 
     SpringApplication.run(Application.class, args); 
    } 

    @Bean 
    public Validator validator(){ 
     return new LocalValidatorFactoryBean(); 
    } 
} 

Nhưng nó vẫn không hoạt động. userRepository là một null. Có lẽ tôi đã nhận được cấu hình sai, lần đầu tiên thử cấu hình java.

+0

đang AvailableValidator và UserRepository cả bởi Spring quản lý (ví dụ. Họ đang khai báo là đậu hoặc chú thích với @ component/@ kho và đúng cách trong con đường quét thành phần)? – ikumen

+0

và cách bạn thực hiện xác thực chính xác? Xem thêm https://jira.spring.io/browse/SPR-13327 –

+0

Xác thực được tự động nhúng khi chú thích Có giá trị. Trình xác nhận hợp lệ có sẵn không được chú thích với @component vì tôi không nghĩ rằng nó phải là, ít nhất là trong cấu hình xml cũ không cần specyfying một bean của một lớp validator cụ thể. Anyways nó quay ra khi tôi thêm một dòng trong tài sản mà vô hiệu hóa hibernates tự động xác nhận nó hoạt động – Greyshack

Trả lời

0

Là một thay thế để vô hiệu hóa xác nhận ngủ đông, bạn đã thử này:

@Primary 
@Bean 
    public Validator validator(){ 
     return new LocalValidatorFactoryBean(); 
    } 

này sẽ dành ưu tiên validator của bạn như đề xuất here.

Mike Kowalski

Các vấn đề liên quan