package org.nutz.mvc.impl; import java.lang.reflect.Method; import org.nutz.mvc.adaptor.AbstractAdaptor; import org.nutz.mvc.adaptor.ParamInjector; /** * 当这个类作为参数声明在入口方法时,当适配器产生错误时,将注入到你的方法中</p> * 这是很普通的类,但,请发挥你的创造力,这可是一个扩展点啊! 你可以继承这个类, * @author wendal * */ public class AdaptorErrorContext { /** * 构建一个适配器错误上下文,由AbstractAdaptor创建</p> * 子类必须有这个构造方法!! * @param size 必须等于入口方法的参数数量 */ public AdaptorErrorContext(int size) { errors = new Throwable[size]; } /** * 具体参数导致的异常信息 */ protected Throwable[] errors; /** * 获取具体参数的异常信息,与参数的顺序一致, 其中会包含null(尤其是最后一个参数,因为就是本类) */ public Throwable[] getErrors() { return errors; } /** * 设置当前参数的错误信息,是子类可以无限扩展的地方 * @param index 参数的索引号 * @param err 参数注入器抛出的异常,建议先用Lang.unwarp(err)解开,获取真正的异常 * @param method 入口方法 * @param value 期待转换的值 * @param inj 参数注入器 */ public void setError(int index, Throwable err, Method method, Object value, ParamInjector inj) { errors[index] = err; } /** * 适配器本身导致的异常,例如JsonAdaptor读取到错误的Json字符串, UploadAdaptor读取到错误的上传信息 */ protected Throwable adaptorErr; public void setAdaptorError(Throwable err, AbstractAdaptor adaptor) { this.adaptorErr = err; } /** * 适配器本身导致的异常,例如JsonAdaptor读取到错误的Json字符串, UploadAdaptor读取到错误的上传信息 */ public Throwable getAdaptorErr() { return adaptorErr; } }