正如docs中所述并且从source code看到的,SnakeYAML按名称使用枚举。我想要的是用枚举值来解析值,例如:
枚举:
public enum Strategy {
ALWAYS_RUN("always-run"),
ALWAYS_SKIP("always-skip"),
DEPENDS("depends");
...
}
YAML:
branches:
trunk: always-skip
bugfix: depends
default: always-run
原因是我们的代码样式强制我们对枚举常量使用大写,而我希望将yaml文件中的数据保持为小写。
答案 0 :(得分:1)
据我所知,这是不可能的。枚举常量是私有的,因此其他类无法访问,因此YAML解析器将无法构造对象。
虽然不完美,但您可以使用aliases为枚举创建昵称。
答案 1 :(得分:0)
我知道已经过了几年,但是自Jackson databind enum case insensitive
起在这里得到了回答。答案 2 :(得分:0)
还有另一种方法可以做到这一点。可能它不干净但工作正常。
org.yaml.snakeyaml.constructor.Constructor
创建一个新的 Constructor 类。ScalarConstuctor
protected class
,其代码实现与基 ScalarConstructor
类中的代码实现相同,但枚举解析实现除外。constructStandardJavaInstance
中检查是否存在带有大写或小写名称的 enum
。Yaml
对象