Ich verwende die folgende Klasse, um meine Beans mit Hibernate-Validierung zu validieren. Es funktioniert großartig. Es ist im Grunde genommen der Hörer here für JPA 1, konvertiert, um Bohnen in meinen Spring-Controllern zu validieren. Ich versuche, die zurückgegebenen Nachrichten anzupassen. This und jede andere Ressource, die ich finde, sagen Sie einfach eine ValidationMessages.properties-Datei in das Web-Inf-Verzeichnis. Diese Datei ist ebenfalls unten enthalten. Das funktioniert nicht. Irgendwelche Vorschläge?Ist eine Konfiguration erforderlich, um benutzerdefinierte Hibernate-Validierungsnachrichten zu verwenden?
public class BeanValidationTool {
public void validate(Object entity) {
TraversableResolver tr = new MyTraversableResolver();
Validator validator = Validation.buildDefaultValidatorFactory().usingContext().traversableResolver(tr).getValidator();
final Set<ConstraintViolation<Object>> constraintViolations = validator.validate(entity);
if (constraintViolations.size() > 0) {
Set<ConstraintViolation<?>> propagatedViolations = new HashSet<ConstraintViolation<?>>(constraintViolations.size());
Set<String> classNames = new HashSet<String>();
for (ConstraintViolation<?> violation : constraintViolations) {
propagatedViolations.add(violation);
classNames.add(violation.getLeafBean().getClass().getName());
}
StringBuilder builder = new StringBuilder();
builder.append("validation failed for classes ");
builder.append(classNames);
throw new ConstraintViolationException(builder.toString(), propagatedViolations);
}
}
public class MyTraversableResolver implements TraversableResolver {
public boolean isReachable(Object traversableObject, Path.Node traversableProperty, Class<?> rootBeanType, Path pathToTraversableObject, ElementType elementType) {
return traversableObject == null || Hibernate.isInitialized(traversableObject);
}
public boolean isCascadable(Object traversableObject, Path.Node traversableProperty, Class<?> rootBeanType, Path pathToTraversableObject, ElementType elementType) {
return true;
}
}
}`
ValidationMessages.properties Datei
validator.min = must be greater than or equal to {value}
validator.notEmpty = This field can't be empty
Dies ist eine große Beschreibung, wie benutzerdefinierte Nachrichten im Frühjahr einzurichten, aber vielleicht mein Verständnis ist begrenzt, Ich denke, um Hibernate-Validator-Nachrichten spezifisch anpassen zu können, sollte ich keine Bean verwenden müssen. Stattdessen sollten die Werte automatisch ersetzt werden und beim Aufruf der Validierungsmethode zurückgegeben werden. – coder