如何在spring属性文件中表示列表的Map

eoxn13cs  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(303)

关闭。这个问题需要更加突出重点。它目前不接受答案。
**想改进这个问题吗?**通过编辑这篇文章更新这个问题,使它只关注一个问题。

29天前关门了。
改进这个问题
我该怎么做 Map<String, List<String>> 在Spring .properties 文件?
为了给出这个问题的一个示例场景,我希望能够将以下内容添加到 @Component :

@Autowired
private Map<String, List<String>> animalHabitats;

…并从一个 .properties 文件:
家:狗,猫,金鱼
农场:绵羊、山羊
动物园:狮子,长颈鹿

x6yk4ghg

x6yk4ghg1#

spring是开箱即用的,但安排起来并不那么直观。

创建.properties文件:

在本例中,我们将创建 habitats.properties/src/main/resources :

my-habitats={ \
  home: {'dog', 'cat', 'goldfish'}, \
  farm: {'sheep', 'goat'}, \
  zoo: {'lion', 'giraffe'} \
}

创建@configuration类:

@Configuration
@PropertySource("classpath:/habitats.properties")
public class HabitatConfiguration {
  @Bean
  public Map<String, List<String>> getHabitatConfig(@Value("#{${my-habitats}}") Map<String, List<String>> habitats) {
    return habitats;
  }
}

将Map注入@component类:

@Component
public class HabitatValidator {
  private final Map<String, List<String>> habitats;

  @Autowired
  public HabitatValidator(Map<String, List<String>> habitats) {
    this.habitats = habitats;
  }

  public void validateInput(String habitat, String animal) throws InvalidAnimalHabitatCombinationException {
    if (!habitats.get(habitat).contains(animal)) {
      throw new InvalidAnimalHabitatCombinationException("You won't find a " + animal + " in a " + habitat);
    }
  }
}

就这样:)

让事情更安全一点

为了更安全的类型,可以用枚举替换字符串。只需确保属性文件中的值与枚举项对齐。例如
而不改变 habitats.properties 文件中,添加以下两个枚举:

public enum Habitat {
  home, farm, zoo
}

public enum Animal {
  dog, cat, goldfish, sheep, goat, lion, giraffe
}

然后将configuration类中的bean方法更改为:

@Bean
public Map<Habitat, List<Animal>> getHabitatConfig(@Value("#{${my-habitats}}") Map<Habitat, List<Animal>> habitats) {
  return habitats;
}

然后像这样把它注入组件中:

private final Map<Habitat, List<Animal>> habitats;

@Autowired
public HabitatValidator(Map<Habitat, List<Animal>> habitats) {
  this.habitats = habitats;
}

相关问题