2

我正在尝试对 jaxb/jackson 的 wink 中的枚举类型进行一些验证。

我有一个枚举,它需要一些值。我想允许一个空值,即不在 xml/json 中设置它,但我也想检查无效值并给出错误。

我发现默认情况下,如果我提供不在枚举中的值,则 jaxb/wink 只会返回 null,因此我尝试使用 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 之外,还有什么方法可以实现这一点吗?

4

0 回答 0