参数转换器
大约 3 分钟
参数转换器
IFastParamConverter 接口是FastChar 核心组件之一,用于 FastAction 方法中 将 请求的参数值 转换成对应的类型。
实现一个参数转换器
开发者可以自定义实现 IFastParamConverter 类,进行参数类型的转换,如下:
TestParamConverter
//参数转换器,实现 UserBean 类型的转换
public class TestParamConverter implements IFastParamConverter {
    @Override
    public Object convertValue(FastAction action, FastParameter parameter, int[] marker) throws Exception {
        if (parameter.getName().equals("selfUser")//判断形参的命名
                && parameter.getType() == UserBean.class)//判断形参的类型 
                {
            
            UserBean user=new UserBean();
            user.setUserId(action.getParamToInt("userId"));
            user.setUserNickName(action.getParam("userNickName"));
            
            marker[0] = 1;//标记此参数类型已处理
            return user;//返回已转换的对象值
        }
        //返回null,则继续寻找下一个参数转换器
        return null;
    }
}UserBean
public class UserBean {
    private int userId;
    private String userNickName;
    public int getUserId() {
        return userId;
    }
    public UserBean setUserId(int userId) {
        this.userId = userId;
        return this;
    }
    public String getUserNickName() {
        return userNickName;
    }
    public UserBean setUserNickName(String userNickName) {
        this.userNickName = userNickName;
        return this;
    }
}注册转换器
开发者实现一个参数转换器后,需要将该实现类注册到系统中才能被系统发现并使用,注册方式如下:
public class FastCharTestWeb implements IFastWeb {
    /**
     * web启动初始化
     * @param engine
     */
    @Override
    public void onInit(FastEngine engine) throws Exception {
        
       //代理器    
       engine.getOverrides()
                .add(TestParamConverter.class);//注册自定义的参数转换器类
                
        /**此处省略其他配置代码**/
    }
}使用转换器
开发者无需显式调用参数转换器,FastChar会根据 FastAction 中方法的形参类型自动触发参数转换器,如下:
html
<form action="http://****/test/updateUser" method="post" >
    <input type="text" name="userId" value="1"/>
    <input type="text" name="userNickName" value="用户昵称"/>
    <input type="submit" title="提交"/>
</form>TestAction
public class TestAction extends FastAction {
    /**
     * 获得路由地址
     * Get routing address
     * @return
     */
    @Override
    protected String getRoute() {
        return "/test";
    }
 
    //形参方式获取参数
    //UserBean 类型的参数
    public void updateUser(UserBean selfUser){
         int userId=selfUser.getUserId();
         
         String userNickName=selfUser.getUserNickName();
        
        /**省略其他业务判断逻辑**/
        
        responseText("更新成功!");
    }
}提示
也可以通过 getParamToClass 方法获取参数 类型为 UserBean 的参数 selfUser,如下:
    public void updateUser(){
         UserBean userBean = getParamToClass("selfUser", UserBean.class);
         int userId=userBean.getUserId();
         String userNickName=userBean.getUserNickName();
        /**省略其他业务判断逻辑**/
        responseText("更新成功!");
    }内置转换器
FastChar默认内置了常规类型的参数转换器,如下:
FastStringParamConverter
String 类型的形参转换,例如:
    public void updateUser(String stringValue,List<String> stringList,String[] stringArray){
        /**省略其他业务判断逻辑**/
        responseText("更新成功!");
    }FastNumberParamConverter
int double float long short 数字类型的形参转换,例如:
    public void updateUser(int intValue,List<Integer> intList,Integer[] intArray){
        /**省略其他业务判断逻辑**/
        responseText("更新成功!");
    }FastBooleanParamConverter
boolean 类型的形参转换,例如:
    public void updateUser(boolean booleanValue,List<Boolean> booleanList,Boolean[] booleanArray){
        /**省略其他业务判断逻辑**/
        responseText("更新成功!");
    }FastDateParamConverter
Date 类型的形参转换,例如:
    public void updateUser(Date dateValue,List<Date> dateList,Date[] dateArray){
        /**省略其他业务判断逻辑**/
        responseText("更新成功!");
    }FastEntityParamConverter
FastEntity 类型的形参转换,例如:
    public void updateUser(FcUserEntity entityValue,List<FcUserEntity> entityList,FcUserEntity[] entityArray){
        /**省略其他业务判断逻辑**/
        responseText("更新成功!");
    }FastEnumParamConverter
Enum 枚举类型的形参转换,例如:
    public void updateUser(UserSexEnum enumValue,List<UserSexEnum> enumList,UserSexEnum[] enumArray){
        /**省略其他业务判断逻辑**/
        responseText("更新成功!");
    }FastFileParamConverter
FastFile 类型的形参转换,例如:
    public void updateUser(FastFile<?> fileValue,List<FastFile<?>> fileList,FastFile<?>[] fileArray){
        /**省略其他业务判断逻辑**/
        responseText("更新成功!");
    }参数类型说明
包含了 List<?> 类型的参数,具体前端如何传参,请查看 获取List参数 说明。