54 CHEN

Rose手册第三章五节:controller层:统一的参数验证办法

rose ** 3.5.1 用来做什么** —————-
* 我们把的参数验证办法叫ParamValidator
* 一般来说,像比如说验证http传来的参数是不是为空呀啥的(发挥你的想象力)。
* 好处在于不用再重复地写if else

3.5.2 怎么用 ————
* 来看一个例子,验证用户的参数不可为空(灰常灰常的实用):

  1. public class NotBlankParamValidator implements ParamValidator {

  2. @Override

  3. public boolean supports(ParamMetaData metaData) {

  4. return metaData.getAnnotation(NotBlank.class) != null;

  5. }

  6. @Override

  7. public Object validate(ParamMetaData metaData, Invocation inv, Object target, Errors errors) {

  8. String paramName = metaData.getParamName();

  9. String value = inv.getParameter(paramName);

  10. if (StringUtils.isBlank(value)) {

  11. return “@参数不能为空”;

  12. }

  13. return null;

  14. }

  15. }

解读:

* 放到controllers下
* 实现ParamValidator
* 实现supports方法,这个方法用来做判断是否要验证当前得到的http参数,一般都用个注解来判断比较文艺
* 实现validate方法,这里是主要逻辑
* metaData里放的是参数的原型
* inv是rose的基础调用
* target是这个参数的最后解析结果,参看上一节里提到的东西
* errors是这个参数解析时出来的错误
* NotBlank是一个自己定义的annotation

3.5.3 使用时action长什么样? ———————-
* 下面的代码是action中使用时长的样子:

  1. @Get("/notBlank")
  2. public String notBlank(@NotBlank @Param(“messages”) String messages) throws Exception {
  3. return “@hello world”;
  4. }

解读: * 当遇到NotBlank注解的参数时,会自动执行参数判断
* 如果messages为空,则会得到“参数不能为空”的返回

文中所提及代码均在 https://github.com/XiaoMi/rose/tree/master/rose-example 提供。
文档持续修改版本在 https://github.com/XiaoMi/rose/tree/master/chapter_3_5

原创文章如转载,请注明:转载自五四陈科学院[http://www.54chen.com]

Posted by 54chen java