提出一个需求

背景:

在数据库设计时都会给字段设置长度,例如: name varchar(20) ,当映射到Controller层时,如果不主动检查参数长度的话,参数最终会保存到数据库。如果字段超长,数据库会抛异常:com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'NAME' 

建议:jfinal在获取activerecord的数据库元信息时,其实是知道数据库设置的长度的,是否可以在Controller设计一种参数级别的注解@Valid(class=UserModel.class ,field="name") 在获取到参数超长时,直接拦截并返回

例如:  public void saveUser(class=UserModel.class,field="name" String name ,String email){}  表示这个参数最终要映射到UserModel 映射的表的name字段。甚至可以拓展判断非空


PS:当然我知道jfinal提供有参数验证机制,也有其他的验证框架,我只是觉得一个参数长度在数据库设计时要写一次,验证代码要写一次,如果要改,两个地方都要改。以上纯属个人的一个想法

评论区

jimchow

2018-12-03 15:26

@波总 了解一下

JFinal

2018-12-03 16:50

@jimchow 创建一个全局拦截器即可,在拦截器中可以通过下面的代码获取注解:
Valid valid = inv.getMethod().getAnnotation(Valid.class);
然后就可以使用你自己定义的这个 valid 注解做你想你想做的事情了

jimchow

2018-12-11 15:08

@JFinal 谢谢波总

热门反馈

扫码入社