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]

捐款订阅54chen
捐赠说明