如何用嵌套的JSON编写Spring Boot YAML配置?

时间:2017-05-09 02:03:04

标签: spring spring-boot yaml snakeyaml

我一直在使用带有YAML的Spring Boot应用程序进行外部配置,到目前为止一直运行良好。玩具示例:

@Component
@ConfigurationProperties
class MyConfig {
  String aaa;
  Foo foo;

  static class Foo {
    String bar;
  }
}

然后是一个具有以下属性的yaml文件:

aaa: hello
foo.bar: world

我的问题是我真的需要在我的配置中添加一个JsonObject。我首先尝试将其添加为MyConfig类中的一个字段,然后编写以下YAML文件,我相信它在语法上是有效的:

aaa: hello
from:
  {
    "first_initial": "D",
    "last_initial": "E"
  }
foo.bar: world

Spring抛出了以下错误:无法访问引用的属性中的索引值...

我最终使用了一个纯字符串而使用了>折叠标记将它放在YAML中,但这意味着我必须在我的代码中手动将字符串解析为JsonObject。

任何人都知道如何做到这一点?

1 个答案:

答案 0 :(得分:1)

这应该有效:

@Component
@ConfigurationProperties
class MyConfig {
  String aaa;
  Foo foo;
  String from;
  static class Foo {
    String bar;
  }
  // ... getters setters

  public JsonObject getFromAsJson() {
    // create object from "this.from"
  }
}

aaa: hello
foo: 
  bar: world
from: |
    {
      "first_initial": "D",
      "last_initial": "E"
    }

和此:

aaa: hello
foo: 
  bar: world
from: "{\"first_initial\": \"D\", \"last_initial\": \"E\"}"

第一个版本会保留换行符。