我正试图在jinkb / jackson的wink中对Enum类型实现一些验证。
我有一个带有一些值的枚举。我想允许null,即不在xml / json中设置它,但我也想检查无效值并给出错误。
我发现默认情况下jaxb / wink只返回一个null,如果我提供的值不在enum中,所以我尝试使用setter来验证输入。使用Level.valueOf(newLevel)尝试将提供的字符串转换为值会引发异常并给出堆栈跟踪和http错误。 这没关系,但我真正想要的是一个自定义异常,以便我可以控制错误响应的编组。我试过抛出一个,但它被(我想)眨眼吞噬了。
enum Level {BASIC, ADVANCED};
@XmlAttribute
public void setLevel(String newLevel) throws MyException {
if (newNodeLevel != null) {
try {
this.level = Level.valueOf(newLevel);
} catch (IllegalArgumentException e) {
throw new MyException("level invalid");
}
}
}
除了使用Throwable而不是Exception之外,有什么方法可以实现这个目标吗?