2014-08-27 3 views
2

Я работаю с Spring (4.0.5) и Hibernate Validator (5.1.2.Final)конфигурации для кодирования Hibernate Validator сообщения об ошибках настроены через Spring Framework

Я уже работал сообщения об ошибках с помощью файла .properties , он тоже работает примерно i18n.

  • Это в (JUnit) среды автономный и тестирования, на данный момент. Я не хочу включать веб-среду, чтобы все было просто.

У меня есть следующий:

Для ValidationMessages_es_PE.properties файла (на испанском языке)

person.salary.digits=Dato invalido '${validatedValue}', máximo tamaño no decimal permitido es {integer}, máximo tamaño decimal permitido es {fraction} 

О инфраструктуре

@Configuration 
public class ValidatorConfiguration { 

    @Bean 
    public ResourceBundleMessageSource resourceBundleMessageSource(){ 
     ResourceBundleMessageSource resourceBundleMessageSource = new ResourceBundleMessageSource(); 
     resourceBundleMessageSource.setDefaultEncoding("UTF-8"); 
     resourceBundleMessageSource.setBasenames("com.manuel.jordan.validation.messages.ValidationMessages"); 
     return resourceBundleMessageSource; 
    } 

    @Bean 
    public LocalValidatorFactoryBean localValidatorFactoryBean(){ 

LocalValidatorFactoryBean localValidatorFactoryBean = new LocalValidatorFactoryBean(); 
     localValidatorFactoryBean.setValidationMessageSource(resourceBundleMessageSource()); 

     MessageSourceResourceBundleLocator messageSourceResourceBundleLocator = new MessageSourceResourceBundleLocator(resourceBundleMessageSource()); 
     ResourceBundleMessageInterpolator resourceBundleMessageInterpolator = new ResourceBundleMessageInterpolator(messageSourceResourceBundleLocator); 
     localValidatorFactoryBean.setMessageInterpolator(resourceBundleMessageInterpolator); 

     return localValidatorFactoryBean; 
    } 


} 

Наблюдайте У меня есть setDefaultEncoding("UTF-8")

Тест класс

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(classes=ValidatorConfiguration.class) 
public class InvalidPersonValidation03Test { 

    private static final Logger logger = LoggerFactory.getLogger(InvalidPersonValidation03Test.class); 

    @Autowired 
    private LocalValidatorFactoryBean validator; 

    public InvalidPersonValidation03Test(){ 
     LocaleContextHolder.setLocale(new Locale("es","PE")); 
    } 

    @Test 
    public void testInvalidNullId(){ 
    ... 

Часть продукции является следующие

- >>>testInvalidFractionSalary 
- ConstraintViolationImpl{interpolatedMessage='Dato invalido '1578.100', m�ximo tama�o no decimal permitido es 4, m�ximo tama�o decimal permitido es 2', propertyPath=salary, rootBeanClass=class com.manuel.jordan.domain.PersonValidation03, messageTemplate='{person.salary.digits}'} 
- ConstraintViolationImpl{interpolatedMessage='Dato invalido '1578.100', m�ximo tama�o no decimal permitido es 4, m�ximo tama�o decimal permitido es 2', propertyPath=salary, rootBeanClass=class com.manuel.jordan.domain.PersonValidation03, messageTemplate='{person.salary.digits}'} 

Символы ñ и á не показывая, как ожидается,

Мой IDE уже

Preferences -> Workspace -> Text file encoding с UTF-8

Какая дополнительная недостающая конфигурация мне нужна?

+0

Попробуйте установить на сервер '-Dfile.encoding = utf-8'. –

+0

Спасибо, где я должен применить это? Я попытался использовать 'JUnit-> Run Configurations -> Arguments' в' VM arguments' или 'Program arguments' и такие же плохие результаты. –

ответ

1

Вы не можете использовать символы Unicode, как это, в файле свойств. См http://docs.oracle.com/javase/8/docs/api/java/util/PropertyResourceBundle.html

В этом случае символы, которые не могут быть представлены в ISO-8859-1 кодирования должен быть представлен Unicode Escapes, как определено в разделе 3.3 спецификации языка Java ™ ...

á будет \ u00E1 и п \ u00F1

+0

Что-то странно, у меня есть другой проект, работающий с .properties на испанском и португальском языках, и все работает отлично, проблема в том, что теперь уникальная разница в том, что теперь я работаю с Hibernate Validator .. –

+0

Возможно, вы знаете инструмент, который позволяет мне быстро сделать это преобразование? создавая, возможно, новый файл с преобразованными данными? Конечно, сохранить старый. Спасибо –

+1

nativetoascii, это часть JDK. См. Также http://stackoverflow.com/questions/4659929/how-to-use-utf-8-in-resource-properties-with-resourcebundle – Hardy