Różnica między @Valid i @Valided na wiosnę
Spring obsługuje dwie różne metody walidacji: walidację wiosenną i walidację fasoli JSR-303. Oba mogą być używane przez zdefiniowanie walidatora Spring, który deleguje do innych delegatorów, w tym walidatora bean. Jak na razie dobrze.
Ale kiedy adnotacja metod faktycznie żąda walidacji, to inna historia. I can adnotate like this
@RequestMapping(value = "/object", method = RequestMethod.POST)
public @ResponseBody TestObject create(@Valid @RequestBody TestObject obj, BindingResult result) {
Lub w ten sposób
@RequestMapping(value = "/object", method = RequestMethod.POST)
public @ResponseBody TestObject create(@Validated @RequestBody TestObject obj, BindingResult result) {
Tutaj @Valid jest javax./ align = "left" / Valid , a @Validated to org.springframework./ align = "left" / adnotacja.Zwalidowany . Dokumenty do tego ostatniego mówią
Co nie pomaga, bo nie mówi dokładnie, czym się różni. Jeśli w ogóle. Oba wydają się działać całkiem dobrze dla mnie.Wariant JSR-303 jest prawidłowy, wspierający specyfikację walidacji grupy. Zaprojektowany do wygodnego użytkowania z obsługą JSR-303 firmy Spring, ale Nie dotyczy JSR-303.
2 answers
Jak zacytowałeś z dokumentacji, @Validated
zostało dodane do obsługi "grup walidacji", tj. grupy pól w zatwierdzonej fasoli. Może to być używane w formularzach wieloetapowych, w których można zweryfikować imię i nazwisko, adres e-mail itp.. w pierwszym kroku, a następnie inne pola w następnym kroku.
Powodem, dla którego nie zostało to dodane do @Valid
adnotacji jest to, że jest standaryzowane przy użyciu java community process (JSR-303), co wymaga czasu i Programiści Spring chcieli umożliwić ludziom korzystanie z tego funkcjonalność szybciej.
Przejdź do tego biletu jira , aby zobaczyć, jak powstała adnotacja.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-23 09:13:55
Bardziej prosta odpowiedź. Dla tych, którzy jeszcze nie wiedzą, co na ziemi jest "grupa walidacyjna".
Wykorzystanie do walidacji @Valid
Kontroler:
@RequestMapping(value = "createAccount")
public String stepOne(@Valid Account account) {...}
Obiekt formularza:
public class Account {
@NotBlank
private String username;
@Email
@NotBlank
private String email;
}
Użycie dla @Validated
Grupy walidacji
Źródło: http://blog.codeleak.pl/2014/08/validation-groups-in-spring-mvc.html
Kontroler:
@RequestMapping(value = "stepOne")
public String stepOne(@Validated(Account.ValidationStepOne.class) Account account) {...}
@RequestMapping(value = "stepTwo")
public String stepTwo(@Validated(Account.ValidationStepTwo.class) Account account) {...}
Obiekt formularza:
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;
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-30 08:59:14