স্প্রিংয়ে @ ভালিড এবং @ ভালিটেডের মধ্যে পার্থক্য


106

বসন্ত দুটি পৃথক বৈধতা পদ্ধতি সমর্থন করে: বসন্তের বৈধতা এবং জেএসআর -303 শিমের বৈধতা। উভয়ই একটি স্প্রিং বৈধকারীর সংজ্ঞা দিয়ে ব্যবহার করা যেতে পারে যা শিমের বৈধতাদাতা সহ অন্যান্য প্রতিনিধিদের প্রতিনিধিত্ব করে। এ পর্যন্ত সব ঠিকই.

বাস্তবে বৈধতার অনুরোধ করার পদ্ধতিগুলি যখন টীকাগুলি দেওয়ার সময় এটি অন্য গল্প। আমি এর মতো টিকা দিতে পারি

@RequestMapping(value = "/object", method = RequestMethod.POST)
public @ResponseBody TestObject create(@Valid @RequestBody TestObject obj, BindingResult result) {

বা এই মত

@RequestMapping(value = "/object", method = RequestMethod.POST)
public @ResponseBody TestObject create(@Validated @RequestBody TestObject obj, BindingResult result) {

এখানে, @ ভালিডটি জাভ্যাক্স.এলডিয়েশন.ভালিড , এবং @ ভালিটেটেডটি org.springframework.uthoration.annotation.Vmittedated । পরবর্তীকালের ডকস বলে

বৈধতা গ্রুপগুলির স্পেসিফিকেশনকে সমর্থন করে জেএসআর -303 এর বৈধতার বৈকল্পিক। স্প্রিংয়ের জেএসআর -303 সমর্থন সহ সুবিধাজনক ব্যবহারের জন্য তৈরি কিন্তু জেএসআর -303 নির্দিষ্ট নয়।

যা বেশি সাহায্য করে না কারণ এটি ঠিক কীভাবে আলাদা তা তা বলে না। যদি এ সব. উভয়ই আমার জন্য বেশ সুন্দর কাজ করছে বলে মনে হচ্ছে।


2
: এটা আকর্ষণীয় হতে পারে stackoverflow.com/questions/18911154/...
Wim Deblauwe

4
"বৈধতা গ্রুপগুলির স্পেসিফিকেশনকে সমর্থন করা" একটি খুব স্পষ্ট বক্তব্য।
আরও ভাল অলিভার

আমার মনে করা উচিত যে জেএসআর 303 বৈধতা (নটনুল, ইত্যাদি) এর সাথে বৈধতা শক্তভাবে মিলিত। যেখানে আপনি অন্যান্য বৈধতা / গোষ্ঠী তৈরি করতে পারেন এবং সেগুলি যাচাইকরণের জন্য পরীক্ষা করতে পারেন।
অতুল

@ জেরোফ্লাগএল, সত্য, তবে যেহেতু আমি কখনই এটি ব্যবহার করি নি, তাই আমি "জেএসআর -303 নির্দিষ্ট নয়" অংশটির পরিবর্তে বিন্দুটি মিস করেছি এবং স্থির করেছি। এখন এটা পরিষ্কার।
সের্গেই টেচেনভ

উত্তর:


83

আপনি ডকুমেন্টেশন থেকে উদ্ধৃত হিসাবে, @Validated"বৈধতা গ্রুপ", যাচাই শিম মধ্যে ক্ষেত্রের গ্রুপ গ্রুপ সমর্থন যোগ করা হয়েছে। এটি মাল্টি স্টেপ ফর্মগুলিতে ব্যবহার করা যেতে পারে যেখানে আপনি নাম, ইমেল ইত্যাদি প্রথম পদক্ষেপে এবং তারপরে অন্যান্য পদক্ষেপের নিম্নলিখিত পদক্ষেপগুলিতে যাচাই করতে পারেন।

@Validএটিকে টীকায়িতকরণে যুক্ত না করার কারণ হ'ল এটি জাভা সম্প্রদায় প্রক্রিয়া (জেএসআর -303) ব্যবহার করে প্রমিত করা হয়েছে, এতে সময় লাগে এবং স্প্রিং ডেভেলপাররা লোকদের এই কার্যকারিতাটি শীঘ্রই ব্যবহার করার অনুমতি দিতে চেয়েছিল।

টীকাটি কীভাবে অস্তিত্ব নিয়ে এসেছিল তা দেখতে এই জিরা টিকিটে যান ।


112

আরও সরাসরি উত্তর। যারা এখনও পৃথিবীতে জানেন না তাদের জন্য "বৈধতা গ্রুপ"

এর জন্য ব্যবহৃত @Validভ্যালিডেশন

নিয়ন্ত্রক:

@RequestMapping(value = "createAccount")
public String stepOne(@Valid Account account) {...}

ফর্ম অবজেক্ট:

public class Account {

    @NotBlank
    private String username;

    @Email
    @NotBlank
    private String email;

}

@Validatedবৈধকরণ গ্রুপের
উত্সের জন্য ব্যবহার : http://blog.codeleak.pl/2014/08/ বৈধকরণ-groups-in-spring-mvc.html

নিয়ন্ত্রক:

@RequestMapping(value = "stepOne")
public String stepOne(@Validated(Account.ValidationStepOne.class) Account account) {...}

@RequestMapping(value = "stepTwo")
public String stepTwo(@Validated(Account.ValidationStepTwo.class) Account account) {...}

ফর্ম অবজেক্ট:

public class Account {

    @NotBlank(groups = {ValidationStepOne.class})
    private String username;

    @Email(groups = {ValidationStepOne.class})
    @NotBlank(groups = {ValidationStepOne.class})
    private String email;

    @NotBlank(groups = {ValidationStepTwo.class})
    @StrongPassword(groups = {ValidationStepTwo.class})
    private String password;

    @NotBlank(groups = {ValidationStepTwo.class})
    private String confirmedPassword;

}

ধন্যবাদ @ ঝুহং.জাস্পারকে দুর্দান্ত সরলতার সাথে বিশদটি ব্যাখ্যা করার জন্য।
গৌতম তায়াগি

আমি ঠিক 2 ঘন্টা ধরে যা খুঁজছিলাম ঠিক এটিই, ধন্যবাদ @ ঝুহং.জাস্পার
হুসেন

ধন্যবাদ @ ঝুহং এই জন্য খুঁজছেন হয়েছে।
বিষ্ণু দহাতেণ্ডে

4

উদাহরণে প্রশ্নের স্নিপেট কোড, @Validএবং @Validatedকোনও পার্থক্য নেই। তবে যদি @RequestBodyকোনও Listঅবজেক্টের সাথে টিকা দেওয়া হয় , বা স্ট্রিং মান দ্বারা টীকাযুক্ত করা হয় @RequestParam, তবে বৈধতা কার্যকর হবে না।

এটি কার্যকর করার জন্য আমরা @Validatedএর পদ্ধতি-স্তরের বৈধতা ক্ষমতাটি ব্যবহার করতে পারি। এটি অর্জনের জন্য, মূল বিষয়টি @Validatedক্লাসে রাখা। এটি বসন্ত কাঠামোর মধ্যে @Validএবং এর @Validatedমধ্যে আরও একটি গুরুত্বপূর্ণ পার্থক্য হতে পারে ।

Refrence


আপনি কী ব্যাখ্যা করতে পারেন যে টীকাগুলির কোনও জিনিসের জন্য কোনও প্রভাব নেই List? আমি ধরে নিই যে এটিও অন্যান্য সংগ্রহের মতো কাজ করবে না Map? আমার প্রশ্নে আপনি আমাকে আরও বিস্তারিত ব্যাখ্যা দিতে পারেন: stackoverflow.com/questions/60167961/...
Theiaz

1
@ থিয়াজ আপনার ইচ্ছামত
ইচ্ছামতো

1

উপরে ছাড়াও, আপনি কেবল @Validনেস্টেড বৈধতার জন্য একটি ডোমেন / ফিল্ডে আবেদন করতে পারেন , এ দিয়ে নয় @validated

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.