2017-10-19 20:51

@JFinal 哦,线程安全问题给忽略了。引入中间控制器的方式后来也想到了,这种方式比较优雅

2017-10-19 18:09

public class MyValidator extends Validator{


@Override
protected void validate(Controller c) {
validateRequired("name", "nameErrorMsg", "姓名不能为空");
validateRequired("gender", "genderErrorMsg", "性别不能为空");

}

@Override
protected void handleError(Controller c) {
c.keepPara(new String []{"name","age"});
c.renderText("校验失败");
}

}

2017-10-19 18:07

@Override
public String getPara(String name) {
if (REQUEST_METHOD_POST.equals(getRequest().getMethod())) {
if (null == postParamMap || postParamMap.isEmpty()) {
try {
postParamMap = JacksonUtils.Json2Map(HttpKit
.readData(getRequest()));
} catch (Exception e) {
return "";
}
}
Object result = postParamMap.get(name);
postParamMap.remove(name);
return (String) result;
} else {
return super.getPara(name);
}
}

private static Map postParamMap = null;

private final static String REQUEST_METHOD_POST = "POST";
private final static String REQUEST_METHOD_GET = "GET";

2017-10-19 18:07

@JFinal 关于controller 中getpara() 重写的实现,我贴一下我的代码,如果有更好的方案,请与大家分享

2017-10-19 18:05

@JFinal 之前你说的方案可以行得通。其实,不用MockController,直接在请求方法的Controller 中重写 getPara()方法就可以了。但是需要注意,可能需要实现getpara(field) 和 getpara(index) 这个两个方法,还是要看你用了方法调用了哪个getpara()

2017-10-19 17:12

@JFinal 本来我想通过采用设计模式来修改一下Validator 中的校验函数,但是似乎行不通,现在也只能自己实现一个PostBodyValidator 了