java - 在 Java 异常中返回导致该异常的行的内容

标签 java spring exception error-handling

我想编写一个文件日志,其中包含从 xml 文件读取的方法的错误。这个方法太大了,我想控制导致错误的行内容。现在我有一个变量,其中包含我要读取的字段,如果该字段失败,该方法将返回带有该字段名称的错误。这是一个糟糕的解决方案,我需要类似但更动态的解决方案。

String error;
...
error= name;
String name = getValue("name");
error= surname;
String surname = getValue("surname");

......

catch(Exception){
return error;
}

最佳答案

是的,这是一个糟糕的主意。

在读取属性之前,您将“name”保存到error变量中。您不知道是否会读取该属性,但无论读取如何,变量都已设置。如果每个属性都已成功解析(这正是我们所希望的),您仍然会将错误变量设置为某个属性名称。

在这种情况下,我们通常会将这些信息放入异常实例中。当我们处于 catch block 时,我们能够访问该信息并采取相应的行动。

public String getValue(String propertyName) {
    try {
        tryToReadProperty(propertyName);
    } catch (Exception e) {
        // something wrong happened
        throw new IllegalArgumentException(propertyName);
    }
}

...

try {
    String name = getValue("name");
    String surname = getValue("surname");
} catch (IllegalArgumentException e){
    String error = e.getMessage();
}

为了简单起见,我使用了 IllegalArgumentException,应该将其替换为更有意义的特定于域的异常类型。

return error;

我们很少这样做。相反,我们propagate an exception或重新抛出不同的层确定的异常。

关于java - 在 Java 异常中返回导致该异常的行的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56751263/

相关文章:

java - Spring Boot中使用nginx代理websocket时出现CORS错误

java - 使用 Caffeine 在 Spring Boot 中进行缓存

java - 如果调用位于 try/catch block 中并且该方法也抛出异常,那么 catch 是否具有优先级?

java - 在 StringBuilder 对象中查找某个字母多次出现

mysql - 如何删除连接表中的行?

c++ - std::stoul 不抛出 std::out_of_range

java - 将 ConcurrentModificationException 映射到 for header 中

java - 如何打印多项式方程

java - 运行 Spring Boot Azure Function App 时出错

java - 在 Swing 中操作 JPanel