Gibt es eine Konfiguration notwendig Hibernate Validation benutzerdefinierte Nachrichten zu verwenden,

StackOverflow https://stackoverflow.com/questions/4619056

Frage

Ich verwende die folgende Klasse meine Bohnen mit Hibernate Validierung zu validieren. Es funktioniert großartig. Es ist im Grunde die Zuhörer gefunden hier für JPA 1, umgewandelt in meiner Feder Controller Validate Bohnen zu verwenden. Ich versuche, die Nachrichten wieder anpassen. Diese und jede andere Ressource ich kann sagen, finden nur eine ValidationMessages.properties Datei im Web-Inf Verzeichnis. Diese Datei wird auch unten enthalten. Das funktioniert nicht. Irgendwelche Vorschläge?

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
War es hilfreich?

Lösung

Sie haben Message in Ihrem Anwendungskontext zu definieren:

<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource" abstract="false"
      scope="singleton" lazy-init="default">
    <property name="basename" value="ValidationMessages"/>
</bean>

Als Sie nur die Bohne verwenden, um die Nachrichten abzurufen:

@Autowired
private MessageSource messageSource;

public String getMessage(String messageName) {
    return messageSource.getMessage(messageName, null, null);
}

Um die Bohnen in Kontext zugreifen werden Sie dies auch tun müssen:

@Component
public class BeanValidationTool{...
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top