请求参数验证(1)-javax.validation

一、pom加入如下配置

<dependency>
  <groupId>javax.validation</groupId>
  <artifactId>validation-api</artifactId>
  <version>1.1.0.Final</version>
</dependency>

二、加注解

@RestController
public class TokenController {

    @InitBinder
    public void initBinder(DataBinder binder){
        binder.setValidator(new TokenValidator());
    }
    @RequestMapping("/token")
    public String token(@ModelAttribute @Valid TokenCommand tokenCommand, BindingResult bindingResult){
        if(bindingResult.hasErrors()){
            StringBuffer stringBuffer = new StringBuffer();
            for (ObjectError objectError : bindingResult.getAllErrors()) {
                stringBuffer.append(objectError.getCode());
            }
            return String.valueOf(stringBuffer);
        }

        return tokenCommand.getAppId();
    }

}

在请求参数前面加入@Valid,后面跟上BindingResult

BindResult result必须紧跟着前面的@ModelAttribute, 否则会出错

方法上面加

    @InitBinder
    public void initBinder(DataBinder binder){
        binder.setValidator(new TokenValidator());
    }

三、写验证类

 1 public class TokenValidator implements Validator {
 2     @Override
 3     public boolean supports(Class<?> aClass) {
 4         return aClass.equals(TokenCommand.class);
 5     }
 6 
 7     //supports返回true执行
 8     @Override
 9     public void validate(Object o, Errors errors) {
10         TokenCommand tokenCommand = (TokenCommand) o;
11         if (tokenCommand.getAppId() == null || tokenCommand.getAppKey() == null) {
12             errors.reject("appid and appkey can not be null");
13         }
14         if(tokenCommand.getAppId().length() < 6){
15             errors.reject("appid length less than 6");
16         }
17         if(tokenCommand.getAppKey().length() < 6){
18             errors.reject("appkey length less than 6");
19         }
20     }
21 }

类要实现Validator,引入的是sring包的。

supprots返回true的情况下执行validate

posted @ 2017-02-16 17:17  凌云之狮  阅读(1417)  评论(0编辑  收藏  举报