यह उदाहरण थोड़ा सा योगदान है; मैंने इसे विस्तृत विवरण निकालने और मेरी समस्या पर ध्यान केंद्रित करने के लिए सरल बना दिया है।एक सत्यापनकर्ता में सेवा को स्वचालित करना
@Component
public class UniqueUsernameValidator implements ConstraintValidator<UniqueUsername, String> {
@Autowired
UsernameService usernameService;
@Override
public void initialize(UniqueUsername uniqueUsername) {
}
@Override
public boolean isValid(String s, ConstraintValidatorContext constraintValidatorContext) {
return !usernameService.exists(s);
}
}
मैं इस तरह मेरी नियंत्रक से सत्यापनकर्ता फोन:
@RequestMapping
public void checkUsername(Model model, User user) {
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
Set<ConstraintViolation<User>> constraintViolations = validator.validateProperty(user, "username");
model.addAttribute("error", constraintViolations.size() > 0);
}
हालांकि, मैं एक NullPointerException
अपवाद मिलती रहती है मैं एक सत्यापनकर्ता है कि इस तरह दिखता है। मैंने अपने सत्यापनकर्ता में एक ब्रेकपॉइंट जोड़ा और देखा कि usernameService
null
था। यह स्वचालित क्यों नहीं हो रहा है? शुरू में मैंने सोचा था कि ऐसा इसलिए था क्योंकि मैंने @Component
के साथ सत्यापनकर्ता को एनोटेट नहीं किया था, लेकिन मुझे अभी भी यह टिप्पणी करने के बाद भी एक ही समस्या है। UsernameService
कक्षा को पहले से ही @Service
के साथ एनोटेट किया गया है और मैं सत्यापित कर सकता हूं कि इसके निर्माता को बुलाया जा रहा है।
मैं वसंत के लिए नया हूं, इसलिए मुझे यह भी यकीन नहीं है कि यह एक वैधता में सेवा करने के लिए ठीक है या नहीं। मैं क्या गलत कर रहा हूं?
धन्यवाद एक गुच्छा! यही वही है जो मैं ढूंढ रहा था। मैं संदर्भ दस्तावेज के माध्यम से जा रहा था, लेकिन मैं "ऑटोवॉयरिंग सेवाओं को बाधाओं" जैसी चीजों की खोज कर रहा था। एक बार फिर धन्यवाद! –
मुझे @Valid के साथ संपादित करना पसंद है। इच्छा है कि मैं एक से अधिक बार ऊपर उठा सकता हूं :) –
बहुत बहुत धन्यवाद, आपके उत्तर ने मुझे समय बचाने में मदद की! –