#java #spring-boot #exception
#java #весенняя загрузка #исключение
Вопрос:
Я пытаюсь реализовать пользовательские сообщения на другом языке в своем приложении, созданном с помощью Spring Boot 2. До сих пор я реализовал его для полей объектов, используя ключи, установленные messages_br.properties
в. Теперь я пытаюсь сделать то же самое с сообщениями об исключениях, генерируемыми в контроллерах, но я не понимаю, как это сделать. Примеры показывают слишком много вещей, которые, по моему мнению, не то, что мне нужно.
Чтобы настроить файл, это в моем Application.java
:
@Bean
public MessageSource messageSource() {
ReloadableResourceBundleMessageSource bundleMessageSource = new ReloadableResourceBundleMessageSource();
bundleMessageSource.setBasename("classpath:messages_br");
bundleMessageSource.setDefaultEncoding("UTF-8");
return bundleMessageSource;
}
@Bean
public LocalValidatorFactoryBean getValidator() {
LocalValidatorFactoryBean bean = new LocalValidatorFactoryBean();
bean.setValidationMessageSource(messageSource());
return bean;
}
В аннотациях над каждым полем я могу указать что-то вроде этого:
@NotEmpty(message = "{beneficiary.name.notEmpty}")
private String name;
Но тот же формат в генерируемом исключении выводит только:
throw new InsufficientBalanceException("${user.balance.insufficientBalance}");
Я почти уверен, что при изучении того, как реализовывать исключения, я видел аналогичный пример, но теперь я больше не могу его найти и не помню, как это делается.
Комментарии:
1. Вы можете определить свойство для ошибки и использовать
@Value("${user.balance.insufficientBalance}")
, а затем использовать это свойство в exception.2. Нет ли способа напрямую считывать ключи из файла без необходимости создавать другое свойство?
3. Вы можете использовать
Environment
для прямого считывания значения из файла. Пожалуйста, проверьте мой ответ. Надеюсь, это поможет.
Ответ №1:
Вы можете создать свойство для сообщения об ошибке с помощью @Value
,
@Value("${user.balance.insufficientBalance}")
private String insufficientBalance;
А затем использовать его в Exception,
throw new InsufficientBalanceException(insufficientBalance);
Если вы не хотите создавать дополнительное свойство, вы можете использовать Environment
@Configuration
@PropertySource("file:messages_br.properties")
public class ApplicationConfiguration {
@Autowired
private Environment env;
public void getErrorMessage() {
env.getProperty("insufficientBalance");
}
//then use getErrorMessage
throw new InsufficientBalanceException(getErrorMessage);
}
}
Надеюсь, это поможет.
Комментарии:
1. При использовании я получаю сообщение об ошибке
Caused by: java.io.FileNotFoundException: messages_br.properties (No such file or directory)
@PropertySource
.2. Когда мы используем
file
in@PropertySource
, file должен находиться там в указанном месте. Вы можете использоватьclasspath
if, если файл свойств присутствует в classpath.т.е@PropertySource("classpath:messages_br.properties")
. Дайте мне знать, если это решит вашу проблему.