你能改变 Type of Java Exception 的错误信息吗?

Can you change the Type of Java Exception's error message?

我正在编写运行时非常慢的面向内部的工具。由于此运行时,我正在尝试验证输入是否有错误,并在实际 运行 工具之前向客户端发送一个包含每个缺失或失败元素的详细列表的 JSON 对象。

我想知道是否有办法修改 java Exception 的错误消息 return 类型,以便我可以在错误中抛出此 HashMap。

包含错误的 hashmap 看起来像这样:

Error: {
   Message: "Your X is configured improperly, please fill out the required fields before running this tool", 
   formXErrors: {
     Message: "The following fields are missing from formX", 
     Error: {
       field1Name: "field 1", 
       field2Name: "field 2",
       ... 
    },
    formYErrors: {
     Message: "The following fields are missing from formY", 
     Error: {
       field1Name: "field 1", 
       field2Name: "field 2",
       ... 
     }
  } 
}

然后如果发现错误我想像这样抛出它(将 HashMap 传递到消息字段而不是字符串):

if (errorHashMap != null) {
  throw new ToolXException(errorHashMap);
}

Java 对我来说有点新,所以我想知道是否有人可以指出我找到一种方法来实现这种行为。有可能吗?或者是唯一的方法return这个HashMap而不是抛出,然后发送给客户端?

提前致谢!

您无法编辑 消息的类型 ,但您当然可以将您喜欢的任何类型的字段添加到自定义 Exception 类型。

class ToolXException extends Exception {
  private final Map<Key, Value> map;
  public Map<Key, Value> getMap() { return map; }
  public ToolXException(Map<Key, Value> map) {
    this.map = map;
  }
} 

...然后你可以把它拿出来,当你抓住它的时候随心所欲地展示它:

try {
  ...
} catch (ToolXException e) {
  doSomethingWith(e.getMap());
}

这绝对有可能。他们的方法是创建一个可抛出子class的子class:ExceptionRuntimeExceptionError。您需要考虑的另一件事是您是否想将自定义异常链接到捕获的异常,或者它是否应该独立于“根本原因”