参数验证器
大约 3 分钟
参数验证器
IFastValidator 是FastChar核心类之一,用来验证 FastAction
中的参数,即参数验证器。
实现一个参数验证器
开发者可以自定义类实现 IFastValidator
接口 ,完成参数的验证。如下:
public class TestValidator implements IFastValidator {
/**
* 验证参数是否正确
*
* @param validator 验证器名称
* @param arguments 传入的验证器参数
* @param paramName 参数名
* @param paramValue 参数值
* @return 验证错误信息 为:null 验证通过,否则代表参数验证失败,直接将返回值作为错误信息响应给前端。
*/
@Override
public String valid(String validator, Object[] arguments, String paramName, Object paramValue) {
if (validator.equals("@user_exist") && paramName.equals("userId")) {
FcUserEntity userEntity = FcUserEntity.getInstance().selectById(paramValue);
if (userEntity != null) {
return "用户已存在!";
}
}
return null;
}
}
注意
当参数验证器返回失败时,将使用 FastOutParamError
进行响应并终止后续代码的执行!
注册验证器
开发者实现一个参数验证器后,需要将该实现类注册到系统中才能被系统发现并使用,注册方式如下:
public class FastCharTestWeb implements IFastWeb {
/**
* web启动初始化
* @param engine
*/
@Override
public void onInit(FastEngine engine) throws Exception {
//代理器
engine.getOverrides()
.add(TestValidator.class);//注册自定义的参数验证器类
/**此处省略其他配置代码**/
}
}
使用参数验证器
调用参数验证器,开发者需要显式调用。
check方法调用
方法 check
属于 FastAction
对象方法,开发者在获取参数前调用 参数验证器 验证,如下:
以新建的 TestValidator 验证器为例:
public class TestAction extends FastAction {
/**
* 获得路由地址
* Get routing address
* @return
*/
@Override
protected String getRoute() {
return "/test";
}
public void updateUser(){
int id = check("@user_exist","woment") //传入参数验证器名为:@user_exist 并携带传入验证器参数:woment
.check("@user_role")//传入参数验证器名为:@user_role
.getParamToInt("userId");
/**省略其他业务判断逻辑**/
responseText("更新成功!");
}
}
AFastCheck注解调用
开发者可以使用 AFastCheck
注解标注到方法的形参中调用 参数验证器 验证,如下:
以新建的 TestValidator 验证器为例:
public class TestAction extends FastAction {
/**
* 获得路由地址
* Get routing address
* @return
*/
@Override
protected String getRoute() {
return "/test";
}
public void updateUser(@AFastCheck(value="@user_exist",arguments={"women"})
@AFastCheck("@user_role")
int userId){
/**省略其他业务判断逻辑**/
responseText("更新成功!");
}
}
内置参数验证器
FastChar默认内置常用的参数验证器。
FastNullValidator
null或空 值验证器,验证器的名称为:@null
验证器第一个参数为返回的失败消息。如下代码:
public class TestAction extends FastAction {
/**
* 获得路由地址
* Get routing address
* @return
*/
@Override
protected String getRoute() {
return "/test";
}
public void updateUser() int userId){
int id = check("@null","参数UserId不可为空!").getParamToInt("userId");
/**省略其他业务判断逻辑**/
responseText("更新成功!");
}
}
FastAction
已将空值验证器 集成到了 getParam
系列方法中,开发者可以直接传入 boolean
值开启验证,如下:
public class TestAction extends FastAction {
/**
* 获得路由地址
* Get routing address
* @return
*/
@Override
protected String getRoute() {
return "/test";
}
public void updateUser() int userId){
int id = getParamToInt("userId",true);
/**省略其他业务判断逻辑**/
responseText("更新成功!");
}
}
提示
此时如果参数 userId 为空时,响应内容为:参数userId不可为空!
响应的内容模板为: 参数{0}不可为空!