调整内容为下:
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