2016-10-23 9 views
2

Я попытался с помощьюЧто такое эффективный способ, чтобы получить значение файла свойств в набор строк весной

@Value("#{'${white.listed.hotel.ids}'.split(',')}") 
private Set<String> fareAlertwhiteListedHotelIds; 

, но когда white.listed.hotel.ids пусто, то также устанавливаются имеют один размер с пустое значение.

white.listed.hotel.ids =

Может кто-то пожалуйста, помогите мне с версией, в которой whiteListedHotelIds может содержать либо значения, если указанные в файле свойств или не имеет элемент для заготовки дело.

+0

Вы имеете в виду указание значения по умолчанию в случае, если whiteListedHotelIds пуст? –

+0

Возможный дубликат http://stackoverflow.com/questions/11991194/can-i-set-null-as-the-default-value-for-a-value-in-spring – Saravana

+0

@Georgesvanhoutte van houtte: Я просто хотел набор должен быть пустым, если whiteListedHotelIds пуст. –

ответ

5

Вы можете вызвать специальный метод (as described in this other answer to build a map, сам вдохновленный @FedericoPeraltaSchaffner's answer):

@Value("#{PropertySplitter.toSet('${white.listed.hotel.ids}')}") 
private Set<String> fareAlertwhiteListedHotelIds; 

... 

@Component("PropertySplitter") 
public class PropertySplitter { 
    public Set<String> toSet(String property) { 
     Set<String> set = new HashSet<String>(); 

     //not sure if you should trim() or not, you decide. 
     if(!property.trim().isEmpty()){ 
      Collections.addAll(set, property.split(",")); 
     } 

     return set; 
    } 
} 

В этом методе, вы можете обрабатывать свойство, как вы хотите (например, определенную логику, когда пустой).

+0

Спасибо .. Это работало. –

+0

Или 'Collections.addAll (set, property.split (", "));' пропускает промежуточный шаг 'List'. – Holger

+0

Спасибо @ Holger! Я заменил Arrays.asList (...) вашим предложением! – alexbt

0

Вводят @Value через конструктор (как вы всегда должны) и делать все постобработки вам нужно есть:

@Component 
class Foo { 
    private final List<String> bar; 

    public Foo(@Value("${foo.bar}") List<String> bar) { 
     this.bar = bar.stream() 
         .filter(s -> !"".equals(s)) 
         .collect(Collectors.toList()); 
    } 
} 

Там нет необходимости усложнять с SPEL.