Spring 为某些相似的键写入yml时出错

Spring 为某些相似的键写入yml时出错,spring,yaml,Spring,Yaml,我有两个键-app.user='user1'和app.user.age='21'。我需要把这些写在yml文件中。当我写这些东西时,我会出错,比如- 1) app: user: 'user1' age: '21' 错误:此处不允许映射值 2) app: user: 'user1' app: user: age:'21' error: **duplication error** 如果我们假设符号x.y在x引用的映射中具有y值的语义,那么当解释为

我有两个键-app.user='user1'和app.user.age='21'。我需要把这些写在yml文件中。当我写这些东西时,我会出错,比如-

1) app:
    user: 'user1'
    age: '21'
错误:此处不允许映射值

2) app: 
    user: 'user1'
   app:
    user:
      age:'21'
error: **duplication error**

如果我们假设符号
x.y
x
引用的映射中具有
y
值的语义,那么当解释为YAML数据时,您的数据模型会自相矛盾。请注意,YAML中未定义此符号。基于这一假设,矛盾在于:

app.user = 'user1'        (1)
app.user.age= '21'        (2)
权利要求
(1)
是指:

app的值是一个映射。此映射包含一个键用户,其值是一个标量,其内容为
user1

权利要求
(2)
是指:

app的值是一个映射。此映射包含一个值为的关键用户,也是一个映射。在该映射中,有一个值为
21
的关键年龄

矛盾是显而易见的:
app.user
不能同时是索赔
(1)
所暗示的标量值和索赔
(2)
所暗示的映射。因此,解决方案显然是消除数据模型中的矛盾。一种可能的方法是:

app:
  user:
    id: 'user1'
    age: '21'
至于复制错误:YAML禁止映射包含相等的键。在代码中,根映射中有两个键
app
,这会导致错误

注意:

我知道有些数据序列化允许一个键同时具有简单值和复杂值。我只能猜你是从那里得到了你的模特的想法。这并不是天生的错误,只是YAML不支持。Boost的信息文件格式就是其中之一

编辑:

如果你不同意我上面关于
x.y
语义的假设,你可能来自Java王国,那里的
Java.lang
Java.util
除了它们的名字有相同的前缀外,完全没有任何关系。最重要的是,它们不是包
java
的子包(如果这让您感到惊讶,请阅读中的“包的明显层次结构”一节)

按照这种语义,数据中没有层次结构,因此YAML中也没有层次结构。您可以编写以下内容,而不是编写嵌套映射:

app.user: 'user1'
app.user.age: '21'

请注意,
不是一个特殊的YAML字符,只是值键的一部分。

您可以格式化代码。格式化代码没有帮助我的意思是在这里格式化代码,以便其他人可以阅读properly@AnandKumar如果你想让人们帮助你,他们需要准确地看到你正在使用的输入。我编辑了您的代码,但我只能猜测前面的
1)
2)
是否真的是yaml文件的一部分。如果有人向你扔了一些未格式化的代码,不清楚文件到底是什么样子,你会帮助他们吗?另外,请告诉我们你使用的是哪个YAML处理器。我猜是蛇毒?