zoukankan      html  css  js  c++  java
  • 【Java】使用@Valid+BindingResult进行controller参数校验

    1.0  @Valid

    @Valid注解用于校验,所属的包: javax.validation.Valid.

    你可以定义实体,在实体的属性上添加校验规则,在API接收数据时添加@Valid注解,这时你的实体将会开启一个校验的功能。

    ## 空检查
    
    @NotEmpty:用在集合类上面;不能为null,而且长度必须大于0 
    
    @NotBlank: 用在String上面;只能作用在String上,不能为null,而且调用trim()后,长度必须大于0 
    
    @NotNull:用在基本类型上;不能为null,但可以为empty。
    
    ## 长度检查
    
    @Size(min=,max=):验证对象(Array,Collection,Map,String)长度是否在给定的范围之内  
    
    不要错用了异常类型,比如在int上不可用@size
    
    @Length(min=, max=) : 只适用于String 类型
    
    ##  Booelan检查
    
    @AssertTrue:   验证 Boolean 对象是否为 true  
    
    @AssertFalse:  验证 Boolean 对象是否为 false 
    
    ##  日期检查
    
    @Past: 验证 Date 和 Calendar 对象是否在当前时间之前  
    
    @Future: 验证 Date 和 Calendar 对象是否在当前时间之后  
    
    @Pattern: 验证 String 对象是否符合正则表达式的规则
    
    ##  数值检查
    
    建议使用在Stirng,Integer类型,不建议使用在int类型上,因为表单值为"" 时无法转换为int,但可以转换为Stirng为"",Integer为null
    
    @Min:  验证 Number 和 String 对象是否大等于指定的值  
    
    @Max:  验证 Number 和 String 对象是否小等于指定的值  
    
    @DecimalMax:  被标注的值必须不大于约束中指定的最大值. 这个约束的参数是一个通过BigDecimal定义的最大值的字符串表示.小数存在精度
    
    @DecimalMin: 被标注的值必须不小于约束中指定的最小值. 这个约束的参数是一个通过BigDecimal定义的最小值的字符串表示.小数存在精度
    
    @Digits:  验证 Number 和 String 的构成是否合法  
    
    @Digits(integer=,fraction=):  验证字符串是否是符合指定格式的数字,interger指定整数精度,fraction指定小数精度。

    2.0  BindingResult 

    Spring验证的错误返回 

    @Valid 和 BindingResult 是一一对应的,如果有多个@Valid,那么每个@Valid后面跟着的BindingResult就是这个@Valid的验证结果,顺序不能乱

     
     1.首先在参数实体类上面加上相关的验证信息
    public class PublicUserForm implements Serializable {
    
        private static final long serialVersionUID = 1L;
    
        /**
         * 手机号
         */
        @NotBlank(message = "{required}")
        @Pattern(regexp = RegexpConstant.MOBILE_REG, message = "{mobile}")
        private String telephone;
    
        /**
         * 密码
         */
        private String password;

    2.controller层

    public ResponseResult regist(@Valid PublicUserForm publicUserForm, BindingResult bindingResult) throws Exception {
    
            //在这里,我们判断参数是否通过校验
            if (bindingResult.hasErrors()) {
                Map<String,String> errorMsg = new HashMap<>();
                for (FieldError item:bindingResult.getFieldErrors()) {
                    errorMsg.put(item.getField(),item.getDefaultMessage());
                }
                //自定义的返回,并将错误信息返回
                return new ResponseResult(false,200, JSON.toJSONString(errorMsg),errorMsg);
            }
    
            PublicUser publicUser = publicUserService.regist(publicUserForm);
            return new ResponseResult(true,200,"访问成功!",null);
        }

    转 : https://www.cnblogs.com/jxd283465/p/12015661.html

  • 相关阅读:
    Deployment of VC2008 apps without installing anything
    用MT.exe将exe中的manifest文件提取出来和将manifest文件放入exe中
    Golang快速入门
    8个优质的编程学习网站
    免费学编程!10个全球顶尖的编程在线自学网站
    7个在线学习C++编程的最佳途径
    为什么多数游戏服务端是用 C++ 来写
    学习游戏服务器开发必看,C++游戏服务器开发常用工具介绍
    Ambari——大数据平台的搭建利器(一)
    Python爬虫项目整理
  • 原文地址:https://www.cnblogs.com/fps2tao/p/13784890.html
Copyright © 2011-2022 走看看