【SSM】后台字段验证

使用校验框架validation和JSR303进行字段验证

JSR 303 是 Java 为 Bean 数据合法性校验提供的标准框架,它已经包含在 JavaEE 6.0 中 ,JSR 303 通过在 Bean 属性上标注类似于 @NotNull、@Max 等标准的注解,指定校验规则,并通过标准的验证接口对 Bean 进行验证。
Hibernate Validator 是 JSR 303 的一个参考实现,除支持所有标准的校验注解外,它还支持以下的扩展注解。

包依赖:
以下版本没有与spring版本5发生包冲突


          org.hibernate
          hibernate-validator
          5.4.1.Final
      
      
          javax.validation
          validation-api
          1.1.0.Final
      
      
          org.jboss.logging
          jboss-logging
          3.3.0.Final
      
      
          com.fasterxml
          classmate
          1.3.1
      
      
          org.hibernate.validator
          hibernate-validator-annotation-processor
          6.1.0.Final
      

spring配置文件:


    
        
        
        
        
    
    
    
        
        
            
                classpath:CustomValidationMessages
            
        
        
        
        
        
    

springmvc配置文件:

	
    

在bean类配置验证信息:

@Setter@Getter
public class User implements Serializable {
    private Integer uid;
    @NotNull
    private String uname;
    @Email(message = "请输入正确的邮箱!")
    private String uemail;
    @NotNull
    private String upassword;
    @Max(value = 150,message = "请输入合法年龄")
    @Min(value = 0,message = "请输入合法年龄")
    private Integer uage;
}

检验规则参考:

 @Null   被注释的元素必须为 null       
@NotNull    被注释的元素必须不为 null       
 @AssertTrue     被注释的元素必须为 true       
@AssertFalse    被注释的元素必须为 false       
@Min(value)     被注释的元素必须是一个数字,其值必须大于等于指定的最小值       
 @Max(value)     被注释的元素必须是一个数字,其值必须小于等于指定的最大值       
@DecimalMin(value)  被注释的元素必须是一个数字,其值必须大于等于指定的最小值       
@DecimalMax(value)  被注释的元素必须是一个数字,其值必须小于等于指定的最大值       
@Size(max=, min=)   被注释的元素的大小必须在指定的范围内       
@Digits (integer, fraction)     被注释的元素必须是一个数字,其值必须在可接受的范围内       
@Past   被注释的元素必须是一个过去的日期       
@Future     被注释的元素必须是一个将来的日期       
@Pattern(regex=,flag=)  被注释的元素必须符合指定的正则表达式       

@NotBlank(message =)   验证字符串非null,且长度必须大于0       
@Email  被注释的元素必须是电子邮箱地址       
@Length(min=,max=)  被注释的字符串的大小必须在指定的范围内       
@NotEmpty   被注释的字符串的必须非空       
@Range(min=,max=,message=)  被注释的元素必须在合适的范围内 

controller类:

 /*
    * 用户注册处理
    * */
    @RequestMapping(path="/signup")
    public RestResult signup(@RequestBody @Valid User user, BindingResult bindingResult){
        // 验证表单数据合法性
         //不合法
        if(bindingResult.hasErrors()){
            List<FieldError> fieldErrors = bindingResult.getFieldErrors();
            Map<String ,Object> errMap = new HashMap<>();
            //输出错误信息
            for(FieldError fe : fieldErrors){
                System.out.println(fe.getField()+" : "+fe.getDefaultMessage());
                errMap.put(fe.getField(),fe.getDefaultMessage());
            }
            // 以json的形式返回给浏览器 
            return resultGenerator.getFailResult("",errMap,errMap.size());
        }

        //调用service层方法 注册
        try{
            userService.addUser(user);
            return resultGenerator.getSuccessResult();
        }catch (Exception e){
            return resultGenerator.getFailResult(e.getMessage());
        }
    }
 /*
   * 用户登录处理
   * */
    @RequestMapping(path = "/signin")
    public RestResult signin(@RequestBody@Valid User user, BindingResult bindingResult){
        System.out.println(user);
        // 验证数据
        if(bindingResult.hasErrors()){
            List<FieldError> fieldErrors = bindingResult.getFieldErrors();
            Map<String ,Object> errMap = new HashMap<>();
            //输出错误信息
            for(FieldError fe : fieldErrors){
                System.out.println(fe.getField()+" : "+fe.getDefaultMessage());
                errMap.put(fe.getField(),fe.getDefaultMessage());
            }
            return resultGenerator.getFailResult("",errMap,errMap.size());
        }

        // 数据库验证合法性
        try{
            userService.checkUser(user);
            // 登录操作
            //.....
            return resultGenerator.getSuccessResult();
        }catch (Exception e){
            return resultGenerator.getFailResult(e.getMessage());
        }
    }

返回给浏览器的json:

{code: 400, msg: "", count: 1, data: {uage: "请输入合法年龄"}}

你可能感兴趣的:(Java,java,spring)