
Seit vorgestern steht der erste Release Candidate vom Spring Framework zum Download bereit.
In dieser Version werden erstmalig der JSR-303 (Bean Validation) und JSR-330 (Dependency Injection in Java) unterstützt. Besonders auf die Umsetzung der Bean Validation war ich gespannt, denn dadurch kann man über Annotations seine Beans mit Constraints versehen.
1. annotieren der Bean
public class Event { int id; @NotNull @Size(min=1,max=50) String description; ...
Durch die zwei Annotations (in validation-api-1.0.CR3.jar enthalten) wird festgelegt, dass der Wert für das Attribut description
nicht null sein darf und minimum 1 Zeichen aber maximal 50 Zeichen enthalten muss.
2. validieren der Bean innerhalb des Controllers
Zur Validierung benötigt man eine Implementierung des JSR-303, wie z.B. den Hibernate Validator (momentan in Version 4.0.0 CR1). Der hat allerdings eine Menge Abhängigkeiten und muss erst über Maven kompiliert werden.
Hat man diese Hürde genommen (und hat die daraus resultierende Jar Datei in sein Projekt eingebunden), benötigt man noch folgende Bibliotheken um keine Runtime Fehler zu produzieren:
- validation-api-1.0.CR3.jar
- slf4j-api-1.5.6.jar
- slf4j-log4j12-1.5.6.jar
- log4j-1.2.14.jar
- commons-logging-1.0.4.jar (benötigt man nicht unbedingt, wurde aber im Beispiel verwendet)
diese liegen dann aber sowieso im lokalen Maven Repository vor.
@RequestMapping(value="/event/save", method=RequestMethod.POST) public String save(Event event,BindingResult bindingResult, Model model) { LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean(); validator.setProviderClass(HibernateValidationProvider.class); validator.afterPropertiesSet(); validator.validate(event,bindingResult); if (!bindingResult.hasErrors()) { // save ... model.addAttribute("message", "update successfully"); } else { for (FieldError e : bindingResult.getFieldErrors()) { log.warn(e.getField()+": "+e.getDefaultMessage()); } model.addAttribute("errors", bindingResult.getFieldErrors()); } model.addAttribute("event", event); return "update"; }
In den Zeilen 3-5 Wird eine Instanz des Hibernate Validators erzeugt. In Zeile 7 wird dann endlich validiert. Ob bei der Validierung Fehler aufgetreten sind kann man mit der Methode hasErrors()
überprüfen (Zeile 9). Zugriff auf alle Fehler (z.B. zum Loggen) erhält man über die Methode getFieldErrors()
(Zeile 13-15).
In Zeile 16 werden die Fehler der View übergeben.
3. Ausgabe der Fehler in der View
Zur Ausgabe der Fehler wird die JSP Standard Tag Library verwendet.
${message}
- ${error.field}: ${error.defaultMessage}