Как получить сообщения проверки по умолчанию из Hibernate Validator? - PullRequest
2 голосов
/ 30 июля 2010

Я пытаюсь получить сообщение об ошибке проверки по умолчанию, используя MessageSource. Код, с которым я работаю, использует отражение, чтобы получить значение параметра message. Для ограничения, которое не переопределяет параметр message, я хотел бы получить сообщение об ошибке по умолчанию. Когда я вызываю метод message для аннотации проверки, я получаю {org.hibernate.validator.constraints.NotBlank.message} (например, для аннотации @NotBlank). Затем я попытался использовать MessageSource, чтобы получить сообщение об ошибке примерно так:

String message = messageSource.getMessage(key, null, Locale.US);

Я пытался установить key на {org.hibernate.validator.constraints.NotBlank.message}, org.hibernate.validator.constraints.NotBlank.message (убрать скобки) и даже org.hibernate.validator.constraints.NotBlank, но я продолжаю получать null. Что я здесь не так делаю?

UPDATE

разъяснение. У меня сложилось впечатление, что Spring поставляется с файлом по умолчанию message.properties для его ограничений. Я прав в этом предположении?

UPDATE

Изменение названия вопроса, чтобы лучше отразить то, что я пытался сделать.

1 Ответ

1 голос
/ 30 июля 2010

После записи в сообщения в блоге от одного из ребят из Hibernate и после поиска в источнике Hibernate Validator, я думаю, я понял это:

public String getMessage(Locale locale, String key) {
    String message = key;
    key = key.toString().replace("{", "").replace("}", "");

    PlatformResourceBundleLocator bundleLocator = new PlatformResourceBundleLocator(ResourceBundleMessageInterpolator.DEFAULT_VALIDATION_MESSAGES);
    ResourceBundle resourceBundle = bundleLocator.getResourceBundle(locale);

    try {
       message = ResourceBundle.getString(key);
    }

    catch(MissingResourceException ) {
       message = key;
    }

    return message;
}

Итак, сначала вам нужно создать экземпляр PlatformResourceBundleLocator с сообщениями проверки по умолчанию.Затем вы получаете ResourceBundle из локатора и используете его, чтобы получить ваше сообщение.Я не верю, что это выполняет какую-либо интерполяцию.Для этого вы должны использовать интерполятор;сообщение в блоге, на которое я ссылался выше, более подробно об этом.

ОБНОВЛЕНИЕ

Другой (более простой) способ - обновить applicationContext.xml и сделать это:

<bean id="resourceBundleSource" class="org.springframework.context.support.ResourceBundleMessageSource">
    <property name="basenames">
        <list>
            <value>org.hibernate.validator.ValidationMessages</value>
        </list>
    </property>
</bean>

Теперь ваш MessageSource заполнен сообщениями по умолчанию, и вы можете сделать messageSource.getMessage().На самом деле, это, вероятно, лучший способ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...