此统一处理的目的在于 Web层、Service层抛出的业务异常以统一的格式显示在页面的固定位置。
首先定义我们的业务异常类。
public abstract class BaseException extends RuntimeException {
private static final long serialVersionUID = -6765360320533958383L;
private String messageCode;
public String getMessageCode() {
return messageCode;
}
public void setMessageCode(String messageCode) {
this.messageCode = messageCode;
}
public BaseException() {
super();
}
public BaseException(String message) {
super(message);
}
public BaseException(String message, Throwable cause) {
super(message, cause);
}
public BaseException(Throwable cause) {
super(cause);
}
public BaseException(String messageCode, String message) {
super(message);
setMessageCode(messageCode);
}
public BaseException(String messageCode, String message, Throwable cause) {
super(message, cause);
setMessageCode(messageCode);
}
public class BusinessException extends BaseException {
private static final long serialVersionUID = -1657938434382769721L;
public BusinessException() {
super();
}
public BusinessException(String message, Throwable cause) {
super(message, cause);
}
public BusinessException(Throwable cause) {
super(cause);
}
public BusinessException(String messageCode, String message) {
super(messageCode, message);
setMessageCode(messageCode);
}
public BusinessException(String messageCode, String message, Throwable cause) {
super(messageCode, message, cause);
setMessageCode(messageCode);
}
}
拦截器类:ErrorHandlingInterceptor.java 用于拦截异常,并在此统一处理
public class ErrorHandlingInterceptor extends AbstractInterceptor {
private static final long serialVersionUID = 1L;
@Override
public String intercept(ActionInvocation invocation) throws Exception {
try {
return invocation.invoke();
} catch (Exception e) {
e.printStackTrace();
handleException(e);
}
return Action.INPUT;
}
/** *//**
* 处理异常
* @param e
*/
private void handleException(Exception e) {
boolean handled = false;
Throwable throwEx = e;
while (throwEx != null) {
if(throwEx instanceof BusinessException) {
BusinessException be = (BusinessException)throwEx;
String errorCode = be.getMessageCode();
// 从缓存中通过ErrorCode取得对应message
// 实现略
String errorMsg = getMessage(errorCode);
// 页面显示错误提示信息
fillError4Display(errorMsg);
handled = true;
}
throwEx = throwEx.getCause();
}
if(!handled) {
fillDefaultError();
}
}
private HttpServletRequest getRequest() {
return (HttpServletRequest)ActionContext.getContext().get(StrutsStatics.HTTP_REQUEST);
}
private void fillDefaultError() {
fillError4Display("系统忙,请稍候再试。");
}
private void fillError4Display(String msg) {
getRequest().setAttribute("_error_msg_", msg);
}
}
拦截所有的异常,并对其进行处理。
当为 自定义的BusinessException时,根据抛出异常时的msgCode,取得对应的显示信息。
msgCode与显示信息的对应关系 可先配置好,系统启动时将其缓存起来。
如果非BusinessException,则统一显示为 “系统忙,请稍候再试。”
将要显示的信息设置到Request中,下面来看看Freemarker模板的写法:
msg.ftl
<div id='_err_msg_div'>
<#if Request['_error_msg_']?exists>
${Request['_error_msg_']}
</#if>
</div>
<script type="text/javascript">
if (!this.Message) {
this.Message = {};
(function() {
/**//**
* show client message
*/
Message.showMsg = function(msg) {
document.getElementById("_err_msg_div").innerHTML = msg;
};
})();
};
</script>
在使用时,只要在页面上想要展现异常信息的地方插入如下代码即可:
<#include "/msg.ftl">
这样 系统中的异常 将会被统一的显示。
当使用js做前台的表单验证的时候,提示用户的输入有问题,则可以使用 Message.showMsg('...'),提示信息也会显示在同一个位置。
这样就实现了异常提示信息的统一展示了。
这是一个比较简易的实现,只提供一个思路。
分享到:
相关推荐
Java 提供了一套完整的异常处理机制,其中包括标准异常类以及允许开发人员自定义异常的能力。本文将详细介绍如何在 Java 中创建自定义异常类,并通过一个示例来展示如何使用这些自定义异常。 #### 创建自定义异常类...
自定义异常类是Python异常处理机制的一个重要组成部分。通过定义和使用自定义异常,开发者可以创建更清晰、更具体的错误处理逻辑。本文介绍了如何定义自定义异常类,如何抛出和捕获它们,以及在使用自定义异常时的...
自定义异常类是Python异常处理机制的一个重要组成部分。通过定义自定义异常类,你可以创建更清晰、更易于维护的代码,并提供更详细的错误信息。本文介绍了如何定义自定义异常类,以及如何在程序中使用它们。希望这些...
### Java 异常艺术:自定义异常的魔力——解锁编程的新维度 #### 第一部分:异常的基石 在 Java 编程中,异常处理是一项重要的技术,它帮助开发者优雅地应对程序运行期间可能出现的各种错误情况。Java 提供了一个...
在Python编程语言中,异常处理是一项关键特性,它允许开发者优雅地处理程序运行时可能出现的错误情况。当内建的异常类无法满足特定需求时,我们可以通过创建自定义异常类来扩展这一功能。本篇文章将深入探讨如何在...
// 自定义异常处理逻辑 } // 其他异常处理逻辑... } } ``` 然后,在消费者的配置文件中启用这个过滤器: ```xml <dubbo:consumer filter="customExceptionHandlerFilter" /> ``` 5. **日志和监控** 在...
1:异常的分类以及区别 2:自定义异常的实现 3:自定义异常的处理 4:异常的妙用
为了自定义异常处理逻辑,我们可以创建一个实现`ResponseErrorHandler`接口的类。这样,当`RestTemplate`遇到错误响应时,会调用我们自定义的异常处理方法,而不是直接抛出默认异常。 例如,我们可以创建一个名为`...
如果这个组件支持异常处理,那么开发者可能会在自定义异常上下文中使用它,例如,当用户在界面上输入无效数据时抛出自定义异常。 总结来说,自定义异常是软件开发中的重要实践,它允许我们定制错误处理策略,使代码...
Java自定义异常处理详细介绍,包括了很多比较经典的案例,可以自己研究自定义异常
第7章 java异常处理
4. **分层异常处理**:自定义异常还可以用于区分不同级别的错误。比如,可以定义一个`轻微错误`异常类和一个`严重错误`异常类,根据错误的严重程度抛出不同类型的异常。 5. **增强代码的可读性**:通过使用描述性强...
对于C++程序员来说,Visual Studio(VS)提供了一种自定义异常处理窗口的功能,使得开发者可以在遇到错误时获得更为详细的调试信息,便于快速定位问题。本文将深入探讨VS自定义异常处理窗口的相关知识点,并结合实际...
自定义活动应考虑异常处理和补偿机制,以便在出现错误时恢复到一致状态。这通常通过`FaultHandlers`和`CompensationHandler`来实现。 6. 工作流持久化: 自定义活动需支持WF的持久化功能,这意味着它们必须能够在...
通过这个实验,学生们不仅理解了Java异常处理的基本概念,还学会了如何实际应用这些知识,包括处理不同类型的异常、创建自定义异常以及在实际编程场景中应用异常处理机制。这样的实践有助于提高代码的健壮性和可维护...
自定义异常是Java异常处理的一部分,允许我们创建符合特定业务需求的异常类。下面我们将深入探讨Java自定义异常及其应用。 首先,自定义异常通常是通过扩展Java内置的`Exception`类或其子类来实现的。`Exception`类...
本文将基于给定的文件信息,深入解析“自定义异常类步骤”这一主题,涵盖异常处理的基本概念、自定义异常类的设计与实现,以及如何在实际代码中应用这些自定义异常。 ### 异常处理概述 异常处理是一种编程机制,...
同时,自定义异常也有助于保持业务逻辑和异常处理的分离,提高代码质量。 总结来说,自定义异常在C#中是一个强大的工具,能够帮助我们更好地管理和报告应用程序中的错误。通过继承`Exception`类并提供额外的信息,...
### Java自定义异常类详解 #### 一、Java异常体系概览 在Java语言中,异常处理机制是一种用于处理程序运行时错误的重要机制。Java中的异常处理基于`java.lang.Throwable`类,它有两个重要的子类:`Exception`和`...
【Java异常处理-自定义异常类及课后练习】 在Java编程中,异常处理是程序健壮性的重要组成部分。Java提供了丰富的预定义异常类,但有时这些预定义的异常类并不能满足特定业务需求,这时就需要自定义异常类。自定义...