Situation
J'utilise @PropertySource dans ma classe avec @Value afin d'injecter une valeur dans une carte à partir d'un fichier de propriétés. Le code pour cela est le suivant :
@Value("#{${global.fieldsSubset}}")
private final Map<String, Set<String>> fieldsSubset = new HashMap<>();
Au cas où la propriété requise ne serait pas trouvée, j'aimerais initialiser la carte comme une carte vide. Pour cela j'ai changé le code en :
@Value("#{${global.fieldsSubset : {:}}}")
private final Map<String, Set<String>> fieldsSubset = new HashMap<>();
Problème
Le comportement par défaut fonctionne bien et la carte est vide lorsque la propriété n'est pas trouvée, mais lorsque la propriété est présente, la valeur par défaut reste et la carte est toujours vide.
Voici la classe entière :
@Configuration
@PropertySource(value = "classpath:global.properties", ignoreResourceNotFound = true)
@RefreshScope
public class FieldsSubsetsProperties {
@Value("#{${global.fieldsSubset:{:}}}")
private final Map<String, Set<String>> fieldsSubset = new HashMap<>();
public Map<String, Set<String>> getFieldsSubset() {
return fieldsSubset;
}
public Set<String> getSubsetOfFieldsNames(String subsetName) {
return fieldsSubset.getOrDefault(subsetName,
Collections.emptySet());
}
}
Voici la valeur de la propriété :
global.fieldsSubset = {\
'channel-basic':{'id', 'number', 'name'}, \
'channel':{'id', 'number', 'name', 'description', 'status'}\
}