NutzCN Logo
问答 申请 pull request (对 Nutz MVC 部分的调整)
发布于 2408天前 作者 MingzFan 1430 次浏览 复制 上一个帖子 下一个帖子
标签:

调整内容为下:
1. 入口方法的POJO参数不声明 Param 注解也可以注入,效果与 @Param("..") 保持一致

@At("/object_without_param")
@Ok("json:compact")
public Object test_object_without_param(Pet pet, HttpServletRequest req) {
    return pet;
}


2. ActionInfo 增加 paramNames 属性,使 Processor 在初始化时可以获取参数名称数组

protected static HttpAdaptor evalHttpAdaptor(NutConfig config, ActionInfo ai) {
    HttpAdaptor re = evalObj(config, ai.getAdaptorInfo());
    if (null == re)
        re = new PairAdaptor();
    re.init(ai.getMethod(), ai.getParamNames());
    return re;
}


3. HttpAdaptor.init() 增加 paramNames 入参,传递参数名称数组,以避免后续需要获取参数名称数组的时候再去读取 module 的 class 文件

/**
 * 这个函数将在你的适配器生命周期内,这个函数将只被调用一次。它用来告诉你的适配器,你需要适配什么方法。
 * 
 * @param method
 *            你需要适配的方法
 * @param paramNames
 *            方法的参数名称数组
 */
void init(Method method, String[] paramNames);

调整涉及的类:
AbstractAdaptor
VoidAdaptor
PairAdaptor
JsonAdaptor
UploadAdaptor
WhaleAdaptor

4. 当入口函数需要定义 AdaptorErrorContext 类型参数时,不再硬性要求定义为入口函数的最后一个参数,可以入口函数中任意位置的参数(存在多个 AdaptorErrorContext 参数时只以第一个为准)

// 传入的id,会是一个非法的字符串!!
@At({"/err/param/anywhere", "/err/param/anywhere/?"})
public void errParamAnyWhere(AdaptorErrorContext errCtx, @Param("id") long id) {
    TestCase.assertNotNull(errCtx);
    TestCase.assertNotNull(errCtx.getErrors()[1]);
}


5. 增加上述调整相应的 test case

11 回复

忘了说,所有 test case 已全部测试通过

我觉得呢, HttpAdaptor这样改吧, 会破坏兼容性的...

你可以新建一个HttpAdaptor2接口, 然后init(ActionInfo ai) , 更具有通用性吧??

然后让内置的HttpAdaptor统统实现HttpAdaptor2接口

另外, 建议把nutzmore也clone到本地哦, 里面有各种接口的第三方实现, 可以提前检查一下兼容性

感谢兽总指点,忽视了兼容性的问题 - -|||。我先按照你所说的去弄下 ^_^

@wendal
改了如下:
HttpAdaptor2

public interface HttpAdaptor2 extends HttpAdaptor {

    /**
     * 这是更高级的初始化方法,可以获得更多的初始化信息
     *
     * @see org.nutz.mvc.HttpAdaptor
     */
    void init(ActionInfo ai);

}


AbstractAdaptor

public abstract class AbstractAdaptor implements HttpAdaptor2


AdaptorProcessor.evalHttpAdaptor()

protected static HttpAdaptor evalHttpAdaptor(NutConfig config, ActionInfo ai) {
    HttpAdaptor re = evalObj(config, ai.getAdaptorInfo());
    if (null == re)
        re = new PairAdaptor();
    if (re instanceof HttpAdaptor2)
        ((HttpAdaptor2) re).init(ai);
    else
        re.init(ai.getMethod());
    return re;
}


汇报下情况:
所有 test case 通过,nutzmore 涉及的 test case 通过(前提是有 test case的,没有 test case 的一概编译通过)

我发个 pull request 然后麻烦你看下变动的地方然后指点一下还有哪些需要调整的?^ ^

@wendal 入口函数存在多个 AdaptorErrorContext 参数的时候会抛异常,因为会引起路径参数对应错乱,目前是按照只有一个 AdaptorErrorContext 参数来对应路径参数的。还有的就是没有按照当初的设定来,多个 AdaptorErrorContext 的话是以最后一个为准,而不是第一个。我提个 pull request fix 一下?之前没针对多个 AdaptorErrorContext 参数进行测试,实在抱歉!!!

提呗,木鸡冻

@wendal 怕造成负面影响,所以急了点 ( ̄▽ ̄)"

添加回复
请先登陆
回到顶部