异常方法e.getMessage()和e.getLocalizedMessage()显示包

时间:2018-02-13 10:12:00

标签: java exception

我在我的Java应用程序中添加了异常处理,并且无法理解为什么在某些情况下异常方法e.getMessage()e.getLocalizedMessage()返回的字符串包括我的自定义Exception类的包。

这就是我配置它的方式:

MyCustomException:

package project.be.exception;

public class MyCustomException extends Exception{
 public MyCustomException() {

}

public MyCustomException(String arg0) {
    super(arg0);

}

public MyCustomException(Throwable arg0) {
    super(arg0);

}

public MyCustomException(String arg0, Throwable arg1) {
    super(arg0, arg1);

}

public MyCustomException(String arg0, Throwable arg1, boolean arg2, boolean arg3) {
    super(arg0, arg1, arg2, arg3);

}
}

MyServiceCaller:

public class MyServiceCaller implements HISException DefaultRESTService<DefaultModel>{


    public DefaultResponse get(Service_Api service, Object caller, Object param) throws MyCustomException {

        try{
         ...
        } catch (Exception e){
           throw new MyCustomException ("Hello message exception");
        }

        }
}

MyBussinessClass:

...
try{
 new MyServiceCaller().get(service, param1, param2);
} catch(MyCustomException e){
   System.out.println(e.getLocalizedMessage());
}
...

控制台输出:

project.be.exception: Hello message exception

我想只打印没有先前包的邮件。有什么建议吗?

EDIT1:

使用Exception.getMessage()输出相同,因此我放弃了可能的重复问题: Difference between e.getMessage() and e.getLocalizedMessage()

SOLUTION:

正如isaac提到的那样,我将抛出的异常包装在另一个异常中,因此e.getMessage()e.getLocalizedMessage()会显示该包。

在我的情况下解决输出很容易调用e.getCause().getMessage()而不是e.getMessage()e.getLocalizedMessage()

1 个答案:

答案 0 :(得分:0)

我建议您使用日志系统而不是使用Java SysOut:System.out.println(...)。使用日志记录系统,您可以定义日志的格式。

以下是java.util.logging

的示例

您可以定义自己的日志记录格式。这是Formatter的一个示例,它只显示任何异常的消息:

public class MyFormatter extends Formatter {

    public String format(LogRecord record) {
        StringBuilder builder = new StringBuilder();
        builder.append(formatMessage(record));
        builder.append("\n");
        return builder.toString();
    }
}

然后您可以按如下方式使用它:

public class MyClass {

    // Your logger
    private static Logger logger ;

    // Static initialization block for the logger
    static {
        logger = Logger.getLogger("MyClass");
        try {
            ConsoleHandler handler = new ConsoleHandler();
            handler.setFormatter(new MyFormatter());
            logger.addHandler(handler);
        } catch (IOException e) {
            logger.log(Level.SEVERE, "Failed to initialize Handler", e);
        }
    }

    //...
}

请注意,配置日志记录系统的方法不正确。关键是要说明它是如何工作的。在实际应用程序中,您可以使用系统属性,配置文件等...

为了正确配置记录器,我们提供了多种解决方案。看看这个Stack溢出问题:

我希望这会对你有所帮助。