Flex后台代码发生异常,怎么把异常信息传递给Flex前台,从而进行友好的提示。
想法:
一般开源框架都会有一个统一的入口和对修改的扩展接口。查询一下BlazeDs的异常处理,果然存在BlazeDs异常的统一处理地方,那就是org.springframework.flex.core.ExceptionTranslator类(BlazeDs集成spring)。
public class FlexExceptionTranslator implements ExceptionTranslator {
public boolean handles(Class<?> clazz) {
//判断要拦截的exception类型
return ClassUtils.isAssignable(ServiceException.class, clazz);
}
public MessageException translate(Throwable t) {
if (t instanceof ServiceException) {
ServiceException ex=(ServiceException) t;
MessageException se = new MessageException();
se.setCode("9987");
se.setMessage(ex.getMessage());
se.setDetails("我的程序出错了");
se.setRootCause(t);
return se;
}
return null;
}
}
配置文件配置:
<flex:message-broker services-config-path="/WEB-INF/flex/services-config.xml"> <!-- 异常转化类 --> <flex:exception-translator ref="FlexExceptionTranslator" /> <flex:remoting-service default-adapter-id="my-default-remoting-adapter" default-channels="my-amf" /> <flex:message-service default-adapter-id="my-default-messaging-adapter" default-channels="my-longpolling-amf" /> </flex:message-broker>
配置文件放在flex-servlet.xml文件中或者spring配置文件中。
这样BlazeDs的请求出现的异常都会在这里统一处理,将Service跑出的异常转化为Flex前台识别的异常。