স্প্রিং বুট অ্যাপ্লিকেশনগুলিতে ইনপুট ভ্যালিডেশন অত্যন্ত গুরুত্বপূর্ণ একটি দিক। ডাটা ভ্যালিডেশন নিশ্চিত করতে JSR-303/JSR-380 স্পেসিফিকেশন ব্যবহার করা হয়, যা Hibernate Validator এর মাধ্যমে স্প্রিং বুটে ইমপ্লিমেন্ট করা হয়। @Valid এবং @Validated অ্যানোটেশন দুটি মূলত ডাটা ভ্যালিডেশন কার্যক্রম সম্পাদন করতে ব্যবহৃত হয়, তবে তাদের মধ্যে কিছু পার্থক্য রয়েছে। এই অ্যানোটেশন দুটি মূলত কন্ট্রোলার, সার্ভিস এবং ডোমেইন মডেল ক্লাসে ব্যবহার করা হয়।
@Valid অ্যানোটেশন
@Valid অ্যানোটেশনটি JSR-303 এর অংশ হিসেবে ব্যবহার করা হয় এবং এটি ভ্যালিডেশন সম্পাদন করতে ব্যবহৃত হয়। এটি মূলত Hibernate Validator ইন্টারফেসের মাধ্যমে ক্লাস বা ফিল্ডের ভ্যালিডেশন নিশ্চিত করে। @Valid সাধারণত ফর্ম ডাটা, API রিকোয়েস্ট বডি, অথবা কোনো ডোমেইন অবজেক্টে প্রয়োগ করা হয়।
ব্যবহারের স্থান
- @Valid সাধারণত ফিল্ড ভ্যালিডেশন এবং অবজেক্ট লেভেলে ব্যবহৃত হয়।
উদাহরণ:
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.validation.Valid;
public class User {
@NotNull
private String username;
@Size(min = 6, max = 20)
private String password;
@Valid
private Address address;
// getters and setters
}
class Address {
@NotNull
private String street;
@NotNull
private String city;
// getters and setters
}
এখানে, User ক্লাসে @Valid অ্যানোটেশন ব্যবহার করা হয়েছে, যার মাধ্যমে Address ক্লাসের ভ্যালিডেশন কার্যকর হবে। যখন User অবজেক্টটি @Valid দিয়ে ভ্যালিডেট করা হয়, তখন তার অভ্যন্তরে থাকা Address অবজেক্টও ভ্যালিডেট হবে।
কন্ট্রোলার লেভেলে উদাহরণ:
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
@RestController
@RequestMapping("/user")
public class UserController {
@PostMapping("/create")
public String createUser(@RequestBody @Valid User user) {
// user object is validated
return "User created successfully!";
}
}
এখানে, @RequestBody এর সাথে @Valid অ্যানোটেশন ব্যবহার করা হয়েছে, যাতে ইনকামিং JSON ডেটা অবজেক্টে রূপান্তর করার সময় User এবং তার অভ্যন্তরীণ Address অবজেক্ট ভ্যালিডেট করা হয়।
@Validated অ্যানোটেশন
@Validated অ্যানোটেশনটি Spring-specific এবং @Valid এর মতোই ভ্যালিডেশন কাজ করে, তবে এতে কিছু অতিরিক্ত সুবিধা রয়েছে। এটি গ্রুপ ভিত্তিক ভ্যালিডেশন (group validation) সমর্থন করে, যা @Valid এর মাধ্যমে সম্ভব নয়। এর মাধ্যমে আপনি নির্দিষ্ট গ্রুপ অনুযায়ী ভ্যালিডেশন নির্ধারণ করতে পারেন।
ব্যবহারের স্থান
- @Validated অ্যানোটেশনটি স্প্রিং কনট্রোলার বা সার্ভিস লেয়ার তে ব্যবহার করা হয়, যেখানে ভ্যালিডেশন গ্রুপের প্রয়োজন হতে পারে।
উদাহরণ:
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import org.springframework.validation.annotation.Validated;
import javax.validation.groups.Default;
public class User {
@NotNull(groups = {Default.class, CreateGroup.class})
private String username;
@Size(min = 6, max = 20, groups = CreateGroup.class)
private String password;
// getters and setters
}
interface CreateGroup {}
এখানে, @Validated এবং গ্রুপ ব্যবহার করা হয়েছে। CreateGroup গ্রুপের জন্য শুধুমাত্র password ভ্যালিডেশন কার্যকর হবে, তবে username গ্রুপের জন্য উভয় গ্রুপে কার্যকর থাকবে।
কন্ট্রোলার লেভেলে উদাহরণ:
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
@RestController
@RequestMapping("/user")
public class UserController {
@PostMapping("/create")
public String createUser(@RequestBody @Validated(CreateGroup.class) User user) {
// user object is validated according to the CreateGroup
return "User created successfully!";
}
}
এখানে @Validated(CreateGroup.class) ব্যবহার করা হয়েছে, যার মাধ্যমে শুধুমাত্র CreateGroup গ্রুপের জন্য নির্ধারিত ভ্যালিডেশন কার্যকর হবে। অন্য কোনো গ্রুপের জন্য ভ্যালিডেশন কার্যকর হবে না।
@Valid এবং @Validated এর পার্থক্য
| বৈশিষ্ট্য | @Valid | @Validated |
|---|---|---|
| গ্রুপ ভিত্তিক ভ্যালিডেশন | সমর্থন করে না | গ্রুপ ভিত্তিক ভ্যালিডেশন সমর্থন করে |
| অব্যবহৃত | শুধুমাত্র ফিল্ড/অবজেক্ট ভ্যালিডেশন | গ্রুপ ভিত্তিক ভ্যালিডেশন এবং স্প্রিং কনট্রোলারে ব্যবহৃত হয় |
| অ্যাপ্লিকেশন | সাধারণত Hibernate Validator এর সাথে ব্যবহৃত | স্প্রিং কনট্রোলার বা সার্ভিস লেয়ারে ব্যবহৃত |
সারাংশ
@Valid এবং @Validated দুটি অ্যানোটেশনই স্প্রিং বুটে ভ্যালিডেশন নিশ্চিত করার জন্য ব্যবহৃত হয়, তবে তাদের মধ্যে কিছু পার্থক্য রয়েছে। @Valid সাধারণত সাধারণ ফিল্ড বা অবজেক্ট ভ্যালিডেশনের জন্য ব্যবহৃত হয়, যেখানে @Validated স্প্রিং কনট্রোলার এবং সার্ভিস লেয়ারে গ্রুপ ভিত্তিক ভ্যালিডেশন সমর্থন করে। এই দুটি অ্যানোটেশন সঠিক ইনপুট ডেটা নিশ্চিত করতে সাহায্য করে এবং অ্যাপ্লিকেশনের নিরাপত্তা এবং নির্ভরযোগ্যতা বৃদ্ধি করে।
Read more