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ą

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.

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.
Author: Sergei Tachenov, 2016-03-23

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.

 40
Author: frant.hartm,
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;

}
 1
Author: Zhu Hang,
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