Я скорректировал выражение и написал небольшой тест, чтобы проиллюстрировать это изменение. Короче говоря, используйте ${some.prop:defaultVal}
для определения значения по умолчанию и ${some.prop:}
для определения пустой строки в качестве значения по умолчанию. Кроме того, используйте одинарные кавычки '
в выражении SPEL для указания значения String вместо ссылки.
Поиграйте с TestPropertySource
, чтобы проверить результат. Я добавил второй тест, чтобы показать, что если значение по умолчанию отсутствует, Spring может (не всегда) решить вернуть текстовое представление заполнителя.
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.test.context.TestPropertySource;
import org.springframework.test.context.junit4.SpringRunner;
import static org.assertj.core.api.Assertions.assertThat;
@RunWith(SpringRunner.class)
@TestPropertySource(properties = {"val1=v1", "val2=v2"})
public class SomeTest {
@Value("#{ '${val1:}' != '' ? '${val1}' : ('${val2:}' != '' ? 'default1' : 'default2')}")
private String testVal;
@Value("${nonExistingValue}")
private String nonExistingValue;
@Test
public void test() {
assertThat(testVal).isEqualTo("v1");
}
@Test
public void testNonExistingValue() {
assertThat(nonExistingValue).isEqualTo("${nonExistingValue}");
}
}
Хотя приведенное выше выражение работает, я бы Настоятельно рекомендуем использовать ConfigurationProperties
или T expression type operator
, ссылаясь на метод stati c. Текущая настройка может стать еще менее читаемой, когда выражения станут более сложными.