【问题标题】:SPEL - Split and trim, de-limited valuesSPEL - 拆分和修剪,分隔值
【发布时间】:2020-04-12 02:36:29
【问题描述】:

我正在尝试根据分隔符拆分字符串值并在将它们放入列表之前对其进行修剪。

我可以拆分值,请您建议如何修剪列表。

@Value("#{'${string-values}'.split(',')}")
private List<String> textList;

问题似乎是,Split 返回一个列表,我需要在将它们存储到变量之前调用 trim()。

【问题讨论】:

  • 无论如何最好不要在字段上使用像@Value这样的注入注解。相反,注入作为构造函数参数并在那里使用常用技术。

标签: java spring spring-boot spring-el


【解决方案1】:

最好在属性文件中的值之间不留空格。

要检查代码,可以通过这种方式完成。

private List<String> textList;

public YourController(@Value("${string-values}") String propertyFromFile) {
        this.textList = new ArrayList<>(); 
        Arrays.asList(propertyFromFile.split(",")).forEach(b-> this.textList.add(b.trim()));        
}

【讨论】:

    【解决方案2】:

    我认为使用@Configuration 然后处理它可能会更好,而不是这样做,但是您可以在值注释之上添加一个新注释并使用该注释来处理列表。例如

    @Target(value = {ElementType.TYPE})
    @Value
    public @interface Trim {
     //Override the method you want to override
    }
    
    Public TrimPricessor {
    
    //Implement the annotation method here
    }
    
    

    【讨论】:

      【解决方案3】:

      由于您使用的是 Spring Boot,请使用:

      @Component
      @ConfigurationProperties(prefix = "foo.bar")
      public class MyConfig {
      
          private List<String> list = new ArrayList<>();
      
          public List<String> getList() {
              return this.list;
          }
      
          public void setList(List<String> list) {
              this.list = list;
          }
      
      }
      
      foo.bar.list=      a   ,   b,    c
      

      列表条目被修剪。

      【讨论】:

        【解决方案4】:

        检查 Java - Split and trim in one shot

        @Value("#{'${string-values}'.split('\\s*,\\s*')}")
        private List<String> textList;
        

        【讨论】:

          猜你喜欢
          • 2015-05-13
          • 2018-02-06
          • 2010-10-27
          • 2019-01-31
          • 1970-01-01
          • 1970-01-01
          • 2012-06-27
          • 2010-11-06
          • 1970-01-01
          相关资源
          最近更新 更多