/ / Validation in Spring MVC - java, sprawdzanie poprawności, spring-mvc

Walidacja na wiosnę MVC - java, walidacja, spring-mvc

Używamy Spring MVC 3.0 w naszej aplikacji internetowej. Korzystamy również z ram walidacji Spring MVC.

Podczas sprawdzania poprawności musimy stworzyć nasze walidatory dla każdej jednostki, którą musimy zweryfikować. Na przykład, jeśli mam podmiot Osoby, będę go sprawdzać za pomocą następującej PersonValidator.

public class PersonValidator implements Validator {
/**
* This Validator validates just Person instances
*/
public boolean supports(Class clazz) {
return Person.class.equals(clazz);
}

public void validate(Object obj, Errors e) {
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "firstName", "field.required");
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "surname", "field.required");
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "age", "field.required");
}
}

Moje pytanie brzmi, czy możliwe jest posiadanie różnych walidacji dla tych samych podmiotów dla różnych metod.

@RequestMapping(method = RequestMethod.POST)
public String add(@Valid Person person, BindingResult result) {
if (result.hasErrors()) {
return "person/new";
}
personService.addPerson(person);
return "redirect:/persons";
}

@RequestMapping(method = RequestMethod.POST)
public String update(@Valid Person person, BindingResult result) {
if (result.hasErrors()) {
return "person/edit";
}
personService.updatePerson(person);
return "redirect:/persons";
}

Chcę potwierdzić imię, nazwisko i wiek podczas dodawania nowej osoby, ale podczas aktualizacji nie chcę, aby wiek był obowiązkowy.

To tylko przypadkowa sytuacja, może to być dowolny byt i dowolna własność.

Jak radzimy sobie z takimi sytuacjami?

Dzięki.

Odpowiedzi:

0 dla odpowiedzi № 1

Możesz upuścić @Valid adnotacja, a zamiast tego wewnątrz metody ustaw flagę na obiekcie modelu dla wstawiania kontra aktualizacji, a następnie wywołaj bezpośrednio Validator (możesz wprowadzić je do kontrolera).

Następnie w walidatorze możesz wybrać, które walidacje są wymagane w twoim bieżącym scenariuszu.