【问题标题】:Loading Java.Util.Set in to Spring ConfigurationProperties将 Java.Util.Set 加载到 Spring ConfigurationProperties
【发布时间】:2016-11-20 19:36:26
【问题描述】:

跟随 Spring @ConfigurationProperties 类

@Component
@ConfigurationProperties(prefix = "prefix")
@EnableConfigurationProperties
public class config {
    private Set<String> mySet = new HashSet<>();
}

跟随 Yaml 文件

prefix:
  mySet: !!set {'element1',  'element2'}

使用 SnakeYaml 1.16 版

导致以下错误:

原因:org.springframework.beans.InvalidPropertyException: Invalid bean 类的属性“messageDelivery[0]” [位置.配置]: 索引属性路径“mySet[0]”中引用的属性是 既不是数组也不是 List 也不是 Map;返回值为 [element1]

在序列化过程中出现错误

更新

我试过这个 yaml 结构

prefix:
    mySet:
        element1
        element2

这导致一个集合只有一个值,即“element1 element2”,它将两者连接在一起需要找出什么可以让我将元素彼此分开

【问题讨论】:

  • 可能是申报的问题?不是数组集 ['element1' , 'element2'] 不是列表 ["element1" , "element2" , "element3"] 不是地图 {'element1' : 'apple' , 'element2' : 'orange'} 更改声明并尝试
  • @MuhammadFaisalHyder 我尝试了许多不同的方法来表达数据结构,包括你提到的那些,但它们导致了相同的 ara
  • prefix="channel-broker" 你试过了吗?因为你在这个 sn-p @Marquis Blount 中为 Bean 传递了不同的前缀
  • @MuhammadFaisalHyder 对此感到抱歉。那只是一个糟糕的复制和粘贴。两个前缀在我的实际环境中匹配
  • 前缀:mySet : Marquis(下一行)Blount(下一行,删除这些)Faisal

标签: java spring


【解决方案1】:

我终于开始工作的结构需要加一个逗号

prefix:
    mySet:
        element1,
        element2

【讨论】:

    【解决方案2】:

    我发现您共享的代码中有 2 个问题。

    1. mySet 是私有的,我想知道 Spring 是如何将数据加载到其中的
    2. YAML 格式错误,应该是
    prefix:
       mySet:
         - element1
         - element2
    

    【讨论】:

      【解决方案3】:

      请尝试:

      prefix:
          ? element1
          ? element2
      

      这应该可以在 yaml 文件中表示一个集合。您可以在这里查看详细信息:https://learnxinyminutes.com/docs/yaml/

      【讨论】:

      • 我也尝试在前缀之后添加 !!set 标签,但也没有用
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-09
      • 1970-01-01
      • 2012-02-12
      • 2020-06-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多