Wie man Benutzer Hibernate @Valid Einschränkung mit Feder 3.x?
-
21-09-2019 - |
Frage
Ich arbeite auf einfache Form zu validieren Feldern wie dieser.
public class Contact {
@NotNull
@Max(64)
@Size(max=64)
private String name;
@NotNull
@Email
@Size(min=4)
private String mail;
@NotNull
@Size(max=300)
private String text;
}
Ich biete Getter und Setter wintern Abhängigkeiten auf meinem Classpath also.But ich immer noch die nicht bekommen, wie einfache Form zu validieren gibt es eigentlich nicht so viel Dokumentation für das Frühjahr Hibernate Kombination.
@RequestMapping(value = "/contact", method = RequestMethod.POST)
public String add(@Valid Contact contact, BindingResult result) {
....
}
Können Sie es erklären oder eine Anleitung geben, außer ursprünglichen Feder 3.x Dokumentation
Lösung
Wenn Sie die @Valid Anmerkung verwenden, um die Validierung Ihres Backing Bean auslösen. Dann ist es nicht die Hibernate Annotations es ist javax.validation.Valid von der Validierung API.
Um es laufen Sie brauchen, beide :
- Hibernate Validator 4.1.0 oder höher (Download von hier: http://sourceforge.net/projects/hibernate/files/hibernate -validator )
- Bean Validation API (Download von hier: http: // Repository. jboss.org/maven2/javax/validation/validation-api/1.0.0.GA/
In meinem Fall habe ich einen benutzerdefinierten Validator (RegistrationValidator) anstelle die Formularfelder in der Backing Bean von annotieren die Validierung zu tun. Ich brauche den L18N Schlüssel des für die Fehlermeldungen zu setzen, ist der Grund, dass ich die Feder 3 MessageCodeResolver mit meinem eigenen ersetzen hatte. Das Original von Spring 3 immer versucht, Typen oder Feld hinzufügen Namen die richtigen Schlüssel zu finden, wenn es nicht in ersten Weg gefunden hat.
Ein kleines Beispiel:
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.WebDataBinder;
...
import javax.validation.Valid;
@Controller
public class RegistrationController
{
@InitBinder
protected void initBinder(WebDataBinder binder)
{
binder.setMessageCodesResolver(new MessageCodesResolver());
binder.setValidator(new RegistrationValidator());
}
@RequestMapping(value="/userRegistration.html", method = RequestMethod.POST)
public String processRegistrationForm(@Valid Registration registration, BindingResult result, HttpServletRequest request)
{
if(result.hasErrors())
{
return "registration"; // the name of the view
}
...
}
}
So hoffe, das hilft.
Btw. Wenn jemand die offizielle Homepage der Bean Validation API weiß, bitte sagen ... Thanx.
Andere Tipps
Ich weiß, dass dies ein beantwortet wird ... aber hier ist mein $ 0.02 wert sowieso :-) ich das gleiche Beispiel verwendet hatte, dass Burak bezog sich auf, und die Validierung wurde auch wird nicht automatisch aufgerufen, ... musste ich hinzufügen die <mvc:annotation-driven />
meiner Anwendungskontext Datei ... (dann wurde die Validierung ausgelöst). Stellen Sie sicher, dass Sie auch die mvc Details zum Schema Erklärung hinzufügen ... Beispiel folgt ...
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-3.0.xsd
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/mvc
">
<mvc:annotation-driven />
...
</beans>