当前位置: 首页 > 知识库问答 >
问题:

如何在Spring Boot中读取属性文件值到字符串集

应志用
2023-03-14

我试过使用

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

但是当白色的时候。上市的酒店ids为空,则设置为具有空值的一个大小。

white.listed.hotel.ids=

有人能帮我一个版本,其中WhiteListedHotelIds可以包含属性文件中指定的值,或者没有空白大小写的项目。

共有3个答案

桑博远
2023-03-14

通过构造函数注入@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的事情复杂化。

沈华皓
2023-03-14

您也可以使用Spring表达式语言进行验证,如果提供的字符串为空,则返回空数组或将输入字符串拆分为数组。从jdk-11你可以直接使用isBlank

@Value("#{'${white.listed.hotel.ids}'.trim().isEmpty() ? new String[] {} : '${white.listed.hotel.ids}'.split(',')}")
private Set<String> fareAlertwhiteListedHotelIds;
潘哲
2023-03-14

您可以调用一个自定义方法(如另一个答案中所述,以构建一个映射,其本身受@Federicoperaltachaffner的答案启发):

@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;
    }
}

在这个方法中,您可以随意处理属性(例如,当属性为空时,可以处理特定的逻辑)。

 类似资料:
  • 问题内容: 我正在用弹簧。我需要从属性文件中读取值。这是内部属性文件,而不是外部属性文件。属性文件可以如下。 我需要以传统方式从属性文件中读取这些值。如何实现呢?Spring 3.0是否有最新方法? 问题答案: 在你的上下文中配置PropertyPlaceholder: 然后,你引用bean中的属性: 编辑:更新了代码以使用逗号分隔的多个值来解析属性: 如果那不起作用,则可以定义一个带有属性的be

  • 我在xml文件中有以下数据: 我编写了下面的代码,可以读取文件中的所有节点。 我的问题是如何读取xml文件中属性type=""的值并将其作为String获取? 提前感谢。

  • 问题内容: 我想通过获取从EditText输入的文本来将文件保存到内部存储中。然后,我希望同一个文件以字符串形式返回输入的文本,并将其保存到另一个字符串中,以备后用。 这是代码: 我提供了一些评论,以帮助你进一步分析我要在哪里完成操作/使用变量的观点。 问题答案: 希望这对你有用。 写文件: 读取文件:

  • 问题内容: 我使用的是MIDP 2.0(JSR 118),我只是注意到J2ME中没有用于字符串的读取器。 有谁知道您应该如何从或以与平台无关的方式(即在两个具有不同型号的启用Java的手机之间)读取字符串? 问题答案: 或者看看。 它确实需要对InputStream上读取的字符串进行适当的编码(如对应的),因此它可能不是您想要的- 但它确实可以在不同的手机/型号等上工作。

  • 问题内容: 在发布此问题之前,我用Google搜索Spring项目(不是基于Web的项目)中的属性。我很困惑,因为每个人都在谈论application- context.xml并具有类似的配置 但是,我正在使用Spring进行普通的Java项目(没有Web应用程序之类的东西)。但是我想从属性文件中获取一些通用属性,并且需要在JAVA文件中使用。如何通过使用Spring / Spring注释实现此目

  • 每个人都知道如果我们想要读取属性文件,我们可以这样做: 但是,现在我有了一个类似于SpringBoot的框架。它可以将Spring与Mybatis集成在一起。 问题是前面的代码只能读取我的项目类路径文件,但我需要使用我的框架读取project属性文件。我是怎么做的?