您可以更改 Java 异常的错误消息类型吗?

Nic*_*cci 1 java interface exception

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

我想知道是否有一种方法可以修改 java Exception 的错误消息返回类型,以便我可以在错误中抛出此 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",
       ... 
     }
  } 
}
Run Code Online (Sandbox Code Playgroud)

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

if (errorHashMap != null) {
  throw new ToolXException(errorHashMap);
}
Run Code Online (Sandbox Code Playgroud)

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

提前致谢!

Lou*_*man 5

您无法编辑消息的类型,但您当然可以将您喜欢的任何类型的字段添加到自定义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;
  }
} 
Run Code Online (Sandbox Code Playgroud)

...然后你可以把它拿出来并在你抓住它时以你喜欢的方式显示它:

try {
  ...
} catch (ToolXException e) {
  doSomethingWith(e.getMap());
}
Run Code Online (Sandbox Code Playgroud)