我有一个像这样的简单YAML数据,我正在尝试使用SnakeYaml转换为名为Person
的POJO对象。
age: 123
name: Jackson
phone:
number: 123456
这是执行它的Groovy代码。
@ToString
class Person{
def name
def age
Tel phone
}
@ToString
class Tel{
def number
}
Constructor c = new Constructor(Person.class);
TypeDescription t = new TypeDescription(Person.class);
t.putListPropertyType("phone", Tel.class);
c.addTypeDescription(t);
def person = new Yaml(c).load(input)
println person
这会在Person
内创建Tel
对象,其中包含Person
。
但是,当我尝试按如下方式传递yaml中的- age: 123
name: Jackson
phone:
number: 123456
- age: 234
name: Jackson
phone:
number: 123456
列表时,我收到错误。
Caused by: org.yaml.snakeyaml.error.YAMLException: No suitable constructor with 2 arguments found for class soapunit.Person
at org.yaml.snakeyaml.constructor.Constructor$ConstructSequence.construct(Constructor.java:587)
at org.yaml.snakeyaml.constructor.Constructor$ConstructYamlObject.construct(Constructor.java:340)
... 8 more
这是我得到的错误
{{1}}
答案 0 :(得分:4)
我同意@cfrick,您的示例中的错误是您正在定义列表属性,因为您这样说:
t.putListPropertyType("phone", Tel.class);
但是在您的 Person 类中,您定义了一个单个电话:
class Person{
def name
def age
Tel phone //<-- A SINGLE TELEPHONE!!!
}
要正确更正此问题,只需将 Person 类修改为:
class Person{
def name
def age
List<Tel> phone //<-- A REAL LIST OF TELEPHONES!!!
}
答案 1 :(得分:0)
我找到了自己问题的答案。我在yaml内容中添加了显式分隔符以使其工作。
---
age: 123
name: Jackson
phone:
number: 123456
---
age: 234
name: Jackson
phone:
number: 123456