坚信科学,分享技术

>>>尝试更加利于阅读的2014版科学院,以后都在新版上写。

rose手册第三章三节:controller层:ErrorHandler支持

rose

3.3.1 ErrorHandler的作用

一般来说传统的编程都会到处去try,特别是java里,try来try去的(如果你用erlang一定就知道,已经知道的可能性,怎么能叫异常?都try了还是让它崩了算了。。。)。
如果打开你的项目,每个java文件中的代码都有一堆的try,那这时候就是ErrorHandle上阵的时候了。
ErrorHanle致力于:统一捕捉和处理各种异常,可区分对待和返回;统一的出错体验。
非常类似做web开发时的500统一出错页面这样的东东。
3.3.2 示例

/**
* @author chenzhen@xiaomi.com
* 2010-12-1
*/

package com.chen.controllers;

import net.paoding.rose.web.ControllerErrorHandler;
import net.paoding.rose.web.Invocation;

public class ErrorHandler implements ControllerErrorHandler {

public Object onError(Invocation inv, Throwable ex) throws Throwable {

// TODO logger.error("handle err:", ex);

return "@error";
}
}

这是这么简单,不用怀疑!

3.3.3 放在哪里才能生效?
放在controllers目录下,和controller们在一起(幸福快乐地生活)。
一般来讲,ErrorHandler都是用在web项目里,在最快层起作用。
所有的方法都可以尽情地向处throws Exception了。
不需要再try了。

@Path("")
public class HelloController {
@Get("")
public String index2() throws Exception {
return "@hello world";
}
}


3.3.3 有用的例子: 不同的异常类型做不用的事情

/**
* @author chenzhen@xiaomi.com
* 2010-12-1
*/

package com.chen.controllers;

import net.paoding.rose.web.ControllerErrorHandler;
import net.paoding.rose.web.Invocation;

public class ErrorHandler implements ControllerErrorHandler {

public Object onError(Invocation inv, Throwable ex) throws Throwable {

// TODO logger.error("handle err:", ex);
if (ex instanceof RuntimeException) {
return "@runtime";
}
return "@error";
}
}

文中所提及代码均在 https://github.com/XiaoMi/rose/tree/master/rose-example 提供。
文档持续修改版本在 https://github.com/XiaoMi/rose/tree/master/chapter_3_3


原创文章如转载,请注明:转载自五四陈科学院[http://www.54chen.com]
本文链接: http://www.54chen.com/java-ee/rose-3-3.html

This entry was posted in java and tagged . Bookmark the permalink.

2 Responses to “rose手册第三章三节:controller层:ErrorHandler支持”

  1. zh_xin 说:

    我在controller 层加了ErrorHandler
    看日志在发生异常时抓取到了错误并向前台返回error字符串

    不知道为什么前台还是展示tomcat的500错误页面, 请问是什么情况呢

    • anonymous 说:

      我也是,估计是框架本身的BUG。顺便吐槽下,文档实在有点粗糙。

Leave a Reply