Spring @Value аннотация принудительно применяет min max int
У меня есть следующее поле с пометкой @Value
, указав значение по умолчанию:
@Value("${tolerance.percentage:25}")
private int tolerance;
Этот код правильно инициализирует значение поля в системном свойстве "допуск.процент", если такой объект существует. Если он не существует, по умолчанию используется значение 25.
Однако я хочу сделать еще один шаг, установив минимальное и максимальное значения в этом поле int, поскольку оно представляет процент меньше целого числа, а закон Мерфи означает, что кто-то (возможно, я) может внешне неправильно настроить свойство и мой приложение начнет делать странные вещи во время выполнения, что на мой взгляд слишком поздно. Я хотел бы выдать ошибку, если при запуске приложения для свойства установлено значение "101" или "-1". Черт, я бы даже хотел, чтобы была выдана ошибка, если я попытаюсь установить по умолчанию значение 101 в @Value
аннотации, но это не важно для целей этого вопроса. Вот что я попробовал:
//@Min and @Max don't produce the intended behavior when combined with @Value
@Min(0)
@Max(100)
@Value("${tolerance.percentage:25}")
private int tolerance;
Могу ли я навязать мин и макс на int
поле, которое @Value
в курсе?
1 ответ
Проверка с использованием регулярных аннотаций API проверки будет работать только при определенных обстоятельствах.
- У вас есть реализация ('hibernate-validator') на пути к классам
- Класс, в котором они находятся, используется для привязки внешней конфигурации
Так что вместо использования @Value
с теми, которые вы, вероятно, хотите создать класс, который содержит ожидаемые свойства и использовать связывание с @ConfigurationProperties
, (и вы можете использовать @Range
вместо).
@ConfigurationProperties(prefix="tolerance")
public ToleranceProperties {
@Range(min=1, max=100)
private int percentage = 25;
// Here be a getter/setter
}
Это в сочетании на @Configuration
класс добавить @ EnableConfigurationProperties(ToleranceProperties.class)
и вы можете использовать его в любом месте, где вам нужны свойства. (См. Свойства безопасной конфигурации в справочном руководстве.
Примечание. Вы также можете объявить его как @Component
,