码迷,mamicode.com
首页 > 其他好文 > 详细

探讨在项目中如何处理错误信息

时间:2015-04-16 23:46:42      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:错误信息   错误处理   

一个项目中肯定需要处理各种各样的错误。而对于这些错误,一方面需要程序反应出这些错误并可以让程序员快速地
定位到,另一方面,在发生某些错误时需要给用户适当的错误提示。比如某个请求的方法是

public User getUserInfo(String userId)

此时请求参数userId为null,我在项目中会这么做

public User getUserInfo(String userId){
    Assert.notNull(userId, "userId不能为空");
    // ..
}

并且用一个全局的异常捕捉的类来处理系统中的所有异常,比如Spring中的HandlerExceptionResolver

    public ModelAndView resolveException(HttpServletRequest request,
            HttpServletResponse response, Object handler, Exception ex) {

        Map map = new HashMap();
        map.put("success", false);
        map.put("message", ex.getMessage());
        try {
            sendJson(response, Utils.parseJson(map));
        } catch (IOException e) {
            e.printStackTrace();
        }
        return new ModelAndView();
    }

这样就可以将错误信息返回给客户端。当然为了更好的支持多国用户,可以考虑对错误信息做国际化处理,这里就不具体展开来讲了。不过这里需要注意的是,不能想当然地使用ResouceBundle来处理,因为这里需要处理的是客户端用户,而用ResourceBundle只是根据服务器的语言环境。
对于错误信息的管理,我们还是将其放到配置文件中,这样不仅可以便于修改,并且可以在后期提供国际化。
但是当项目越来越大的时候,把所有类使用的错误信息存储到一个大的属性文件里边将会容易产生维护的噩梦。为了避免这一情况,我们可以借鉴Tomcat中的处理方法:为每个包都分配一个属性文件。例如,在包org.apache.catalina.connector里边的属性文件包含了该包下所有的类抛出的所有错误信息。每个属性文件都会被一个org.apache.catalina.util.StringManager类的实例所处理。当Tomcat运行时,将会有许多StringManager实例,每个实例会读取包对应的一个属性文件。
当包里边的一个类需要产生一个错误信息时,它首先会获得一个StringManager实例。不过,相同包里边的其他一些类可能也需要 StringManager,为每个对象创建一个 StringManager 实例是一种资源浪费。因此,StringManager 类被设计成一个单例 (singleton)类。仅有的一个构造方法是私有的,你不能在类的外部使用 new关键字来实例化。只能传递一个包名来调用它的公共静态方法getManager来获得一个实例。每个实例存储在一个以包名为keyHashtable 中。

private static Map<String, StringManager>managers = new HashMap<String, StringManager>();

public synchronized static StringManager getManager(String packageName) {
    StringManager mgr = (StringManager)managers.get(packageName);
    if (mgr == null) {
        mgr = new StringManager(packageName);
        managers.put(packageName, mgr);
    }
    return mgr;
}

探讨在项目中如何处理错误信息

标签:错误信息   错误处理   

原文地址:http://blog.csdn.net/u012345283/article/details/45082411

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!