স্প্রিং এমভিসির সাথে, বৈধতা সম্পাদনের জন্য 3 টি পৃথক পদ্ধতি রয়েছে: টীকাগুলি, ম্যানুয়ালি বা উভয়ের মিশ্রণ ব্যবহার করে। যাচাই করার জন্য একটি অনন্য "পরিষ্কার এবং সর্বোত্তম উপায়" নেই, তবে সম্ভবত আপনার প্রকল্প / সমস্যা / প্রসঙ্গে আরও উপযুক্ত ফিট করে।
আসুন একটি ব্যবহারকারী আছে:
public class User {
private String name;
...
}
পদ্ধতি 1: যদি আপনার কাছে স্প্রিং 3.x + এবং করার সহজ বৈধতা থাকে তবে javax.validation.constraints
টীকাগুলি (জেএসআর -303 টিকা হিসাবেও পরিচিত) ব্যবহার করুন।
public class User {
@NotNull
private String name;
...
}
আপনার লাইব্রেরিতে আপনার একটি জেএসআর -303 সরবরাহকারীর প্রয়োজন হবে, যেমন হাইবারনেট ভ্যালিডেটর যিনি রেফারেন্স বাস্তবায়ন করেন (এই লাইব্রেরির ডাটাবেস এবং রিলেশনাল ম্যাপিংয়ের সাথে কোনও সম্পর্ক নেই, এটি কেবল বৈধতা দেয় :-)।
তারপরে আপনার নিয়ামকটিতে আপনার এমন কিছু হবে:
@RequestMapping(value="/user", method=RequestMethod.POST)
public createUser(Model model, @Valid @ModelAttribute("user") User user, BindingResult result){
if (result.hasErrors()){
// do something
}
else {
// do something else
}
}
@ ভালিডটি লক্ষ্য করুন: যদি ব্যবহারকারীর একটি শূন্য নাম থাকে তবে ফলাফল.হাসআররেস () সত্য হবে।
পদ্ধতি 2: আপনার যদি জটিল বৈধতা থাকে (যেমন বড় ব্যবসায়ের বৈধতা যুক্তি, একাধিক ক্ষেত্র জুড়ে শর্তাধীন বৈধতা ইত্যাদি), বা কোনও কারণে আপনি পদ্ধতি 1 ব্যবহার করতে পারবেন না, ম্যানুয়াল বৈধতা ব্যবহার করুন। নিয়ন্ত্রণকারীর কোডকে বৈধতা যুক্তি থেকে আলাদা করা একটি ভাল অনুশীলন। স্ক্র্যাচ থেকে আপনার বৈধতা শ্রেণি (এস) তৈরি করবেন না, বসন্ত একটি কার্যকর org.springframework.validation.Validator
ইন্টারফেস সরবরাহ করে (বসন্ত 2 থেকে) since
সুতরাং আসুন আমরা আপনাকে বলি
public class User {
private String name;
private Integer birthYear;
private User responsibleUser;
...
}
এবং আপনি কিছু "জটিল" বৈধতা যেমন করতে চান: যদি ব্যবহারকারীর বয়স 18 বছরের কম হয়, তবে দায়বদ্ধ ব্যবহারকারীর শালীন হওয়া উচিত নয় এবং দায়বদ্ধ ব্যবহারকারীর বয়স 21 বছরের বেশি হওয়া উচিত।
আপনি এরকম কিছু করবেন
public class UserValidator implements Validator {
@Override
public boolean supports(Class clazz) {
return User.class.equals(clazz);
}
@Override
public void validate(Object target, Errors errors) {
User user = (User) target;
if(user.getName() == null) {
errors.rejectValue("name", "your_error_code");
}
// do "complex" validation here
}
}
তারপরে আপনার নিয়ামকের মধ্যে আপনার থাকতে হবে:
@RequestMapping(value="/user", method=RequestMethod.POST)
public createUser(Model model, @ModelAttribute("user") User user, BindingResult result){
UserValidator userValidator = new UserValidator();
userValidator.validate(user, result);
if (result.hasErrors()){
// do something
}
else {
// do something else
}
}
যদি বৈধতা ত্রুটি থাকে, ফলাফল.হাসআরিয়ারস () সত্য হবে।
দ্রষ্টব্য: আপনি "বাইন্ডার.সেটভিলেটেটর (...)" দিয়ে নিয়ন্ত্রকের @InitBinder পদ্ধতিতেও বৈধতা নির্ধারণ করতে পারেন (এক্ষেত্রে পদ্ধতির 1 এবং 2 এর মিশ্রণ ব্যবহার সম্ভব হবে না, কারণ আপনি ডিফল্টটি প্রতিস্থাপন করেন যাচাইকারী)। অথবা আপনি এটি নিয়ামকের ডিফল্ট নির্মাতায় ইনস্ট্যান্ট করতে পারেন। বা আপনার নিয়ামকটিতে একটি @ উপাদান / @ পরিষেবা ব্যবহারকারীভালিডেটর রয়েছে যা আপনি ইনজেক্ট করেছেন (@ অটোয়ার্ডেড): খুব কার্যকর, কারণ বেশিরভাগ বৈধতাবিদরা সিলেটলেটস + ইউনিট পরীক্ষার উপহাসকে আরও সহজ করে তোলে + আপনার ভ্যালিডিটারটি অন্যান্য বসন্তের উপাদানগুলিকে কল করতে পারে।
পদ্ধতি 3:
কেন উভয় পদ্ধতির সংমিশ্রণ ব্যবহার করছেন না? সরল স্টাফগুলি, যেমন "নাম" বৈশিষ্ট্যের সাথে টিকা সহ (যা এটি করা দ্রুত, সংক্ষিপ্ত এবং আরও পঠনযোগ্য) বৈধ করুন। ভ্যালিডেটরদের জন্য ভারী বৈধতাগুলি রাখুন (যখন কাস্টম জটিল বৈধকরণের টীকাগুলি কোড করতে কয়েক ঘন্টা সময় লাগবে, বা ঠিক তখন টীকাগুলি ব্যবহার করা সম্ভব হবে না)। আমি এটি একটি প্রাক্তন প্রকল্পে করেছি, এটি কমন, দ্রুত এবং সহজের মতো কাজ করেছে।
সতর্কতা: ব্যতিক্রম হ্যান্ডলিংয়ের জন্য আপনার বৈধতা হ্যান্ডলিংয়ের ভুল করবেন না । এগুলি কখন ব্যবহার করবেন তা জানতে এই পোস্টটি পড়ুন ।
তথ্যসূত্র: