SnakeYaml 错误:类上没有可写属性

3 java yaml snakeyaml

我犯了一个愚蠢的错误?我是 yaml 新手。不知道为什么,但我的系统看不到我的名为“name”的变量。

完全错误

错误:

cannot create property=name for JavaBean=x.ModuleDescription@7ce6a65d
Run Code Online (Sandbox Code Playgroud)

我的课:

@Data
@NoArgsConstructor
@AllArgsConstructor
public class ModuleDescription {

    private String name;
    private String main;

    private String version = "unknown";
    private String author = "unknown";

    @Setter
    private File file = null;
}
Run Code Online (Sandbox Code Playgroud)

我可以看到该字段,但我的系统看不到。希望有人有想法。谢谢!

fly*_*lyx 6

好吧,您声明该字段name禁止private其他任何人访问该字段。默认情况下,SnakeYAML 仅加载公共字段和属性,即具有公共 getter 和 setter 的值。

因此,一个简单的修复方法是向name类添加公共 getter 和 setter:

public String getName() {
    return name;
}
public void setName(final String value) {
    name = value;
}
Run Code Online (Sandbox Code Playgroud)

为了加载,你需要setter;对于倾倒,您需要吸气剂。或者,您可以声明该字段public

如果你真的想保持字段私有并且添加任何公共 getter / setter,这也可以工作(未经测试):

Yaml yaml = new Yaml();
yaml.setBeanAccess(BeanAccess.FIELD);
ModuleDescription desc = yaml.loadAs(/* YAML source here */,
                                     ModuleDescription.class);
Run Code Online (Sandbox Code Playgroud)