`
kkcheng
  • 浏览: 40744 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

转:自定义异常处理

阅读更多


此统一处理的目的在于 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异常处理机制的一个重要组成部分。通过定义和使用自定义异常,开发者可以创建更清晰、更具体的错误处理逻辑。本文介绍了如何定义自定义异常类,如何抛出和捕获它们,以及在使用自定义异常时的...

    精通Python异常处理:自定义异常类的定义与实践

    自定义异常类是Python异常处理机制的一个重要组成部分。通过定义自定义异常类,你可以创建更清晰、更易于维护的代码,并提供更详细的错误信息。本文介绍了如何定义自定义异常类,以及如何在程序中使用它们。希望这些...

    Java 异常艺术:自定义异常的魔力-解锁编程的新维度.pdf

    ### Java 异常艺术:自定义异常的魔力——解锁编程的新维度 #### 第一部分:异常的基石 在 Java 编程中,异常处理是一项重要的技术,它帮助开发者优雅地应对程序运行期间可能出现的各种错误情况。Java 提供了一个...

    Python语言基础:自定义异常.pptx

    在Python编程语言中,异常处理是一项关键特性,它允许开发者优雅地处理程序运行时可能出现的错误情况。当内建的异常类无法满足特定需求时,我们可以通过创建自定义异常类来扩展这一功能。本篇文章将深入探讨如何在...

    dubbo捕获自定义异常_dubbo异常捕获_dubbo异常_自定义异常_捕捉异常_

    // 自定义异常处理逻辑 } // 其他异常处理逻辑... } } ``` 然后,在消费者的配置文件中启用这个过滤器: ```xml &lt;dubbo:consumer filter="customExceptionHandlerFilter" /&gt; ``` 5. **日志和监控** 在...

    java自定义异常及处理

    1:异常的分类以及区别 2:自定义异常的实现 3:自定义异常的处理 4:异常的妙用

    精讲RestTemplate自定义请求失败异常处理.docx

    为了自定义异常处理逻辑,我们可以创建一个实现`ResponseErrorHandler`接口的类。这样,当`RestTemplate`遇到错误响应时,会调用我们自定义的异常处理方法,而不是直接抛出默认异常。 例如,我们可以创建一个名为`...

    自定义异常

    如果这个组件支持异常处理,那么开发者可能会在自定义异常上下文中使用它,例如,当用户在界面上输入无效数据时抛出自定义异常。 总结来说,自定义异常是软件开发中的重要实践,它允许我们定制错误处理策略,使代码...

    Java自定义异常处理

    Java自定义异常处理详细介绍,包括了很多比较经典的案例,可以自己研究自定义异常

    第7章 java异常处理

    第7章 java异常处理

    Python自学教程-22-自定义异常的作用.ev4.rar

    4. **分层异常处理**:自定义异常还可以用于区分不同级别的错误。比如,可以定义一个`轻微错误`异常类和一个`严重错误`异常类,根据错误的严重程度抛出不同类型的异常。 5. **增强代码的可读性**:通过使用描述性强...

    VS自定义异常处理窗口

    对于C++程序员来说,Visual Studio(VS)提供了一种自定义异常处理窗口的功能,使得开发者可以在遇到错误时获得更为详细的调试信息,便于快速定位问题。本文将深入探讨VS自定义异常处理窗口的相关知识点,并结合实际...

    Windows Workflow Foundation开发实战系列课程(5):自定义活动开发

    自定义活动应考虑异常处理和补偿机制,以便在出现错误时恢复到一致状态。这通常通过`FaultHandlers`和`CompensationHandler`来实现。 6. 工作流持久化: 自定义活动需支持WF的持久化功能,这意味着它们必须能够在...

    实验六:Java异常处理

    通过这个实验,学生们不仅理解了Java异常处理的基本概念,还学会了如何实际应用这些知识,包括处理不同类型的异常、创建自定义异常以及在实际编程场景中应用异常处理机制。这样的实践有助于提高代码的健壮性和可维护...

    java 自定义异常实例二

    自定义异常是Java异常处理的一部分,允许我们创建符合特定业务需求的异常类。下面我们将深入探讨Java自定义异常及其应用。 首先,自定义异常通常是通过扩展Java内置的`Exception`类或其子类来实现的。`Exception`类...

    自定义异常类步骤

    本文将基于给定的文件信息,深入解析“自定义异常类步骤”这一主题,涵盖异常处理的基本概念、自定义异常类的设计与实现,以及如何在实际代码中应用这些自定义异常。 ### 异常处理概述 异常处理是一种编程机制,...

    c# 自定义异常 Exception

    同时,自定义异常也有助于保持业务逻辑和异常处理的分离,提高代码质量。 总结来说,自定义异常在C#中是一个强大的工具,能够帮助我们更好地管理和报告应用程序中的错误。通过继承`Exception`类并提供额外的信息,...

    Java自定义异常类_1.txt

    ### Java自定义异常类详解 #### 一、Java异常体系概览 在Java语言中,异常处理机制是一种用于处理程序运行时错误的重要机制。Java中的异常处理基于`java.lang.Throwable`类,它有两个重要的子类:`Exception`和`...

    Java异常处理-自定义异常类及课后练习

    【Java异常处理-自定义异常类及课后练习】 在Java编程中,异常处理是程序健壮性的重要组成部分。Java提供了丰富的预定义异常类,但有时这些预定义的异常类并不能满足特定业务需求,这时就需要自定义异常类。自定义...

Global site tag (gtag.js) - Google Analytics