• Spring框架 之@Valid注解的使用(嵌套类型的效验)


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

    @Valid 注解类型的使用:

    @Null
    限制只能为null

    @NotNull
    限制必须不为null

    @AssertFalse
    限制必须为false

    @AssertTrue
    限制必须为true

    @DecimalMax(value)
    限制必须为一个不大于指定值的数字

    @DecimalMin(value)
    限制必须为一个不小于指定值的数字

    @Digits(integer,fraction)
    限制必须为一个小数,且整数部分的位数不能超过integer,小数部分的位数不能超过fraction

    @Future
    限制必须是一个将来的日期

    @Max(value)
    限制必须为一个不大于指定值的数字

    @Min(value)
    限制必须为一个不小于指定值的数字

    @Past
    限制必须是一个过去的日期

    @Pattern(value)
    限制必须符合指定的正则表达式

    @Size(max,min)
    限制字符长度必须在min到max之间

    @Past
    验证注解的元素值(日期类型)比当前时间早

    @NotEmpty
    验证注解的元素值不为null且不为空(字符串长度不为0、集合大小不为0)

    @NotBlank
    验证注解的元素值不为空(不为null、去除首位空格后长度为0),不同于@NotEmpty,@NotBlank只应用于字符串且在比较时会去除字符串的空格

    @Email
    验证注解的元素值是Email,也可以通过正则表达式和flag指定自定义的email格式

    注意,不要错用了异常类型,比如在int上不可用@size

    一、普通实体字段验证及嵌套实体字段验证区别

    QQ截图20180528191115.pngQQ截图20180528193456.png

    注意:实体类验证只是针对该实体内第一层对象的属性进行验证,如果存在被验证的实体类为另一个实体类的的成员变量,那么就需要在该成员变量(需要验证的实体类)上加 @valid 注解

    二、Restful请求接口(action/controller层/WEB业务层),实体类数据绑定验证对比

    @1.

    import javax.validation.Valid; 
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.validation.BindingResult;
    
     //请求参数为简单数据组合对象,单层实体字段验证
    
    @ApiOperation(value = "从业务平台获取卡片内容", notes = "卡片内容获取")
    @RequestMapping(value = "/cardInfoDetailtest", method = RequestMethod.POST)
    public Object getCardInfoDetailtemp(@Valid CardInfoDTO info,BindingResult bindingResult){
        OutputObjectCSF obj = new OutputObjectCSF();
          if (bindingResult.hasErrors()) {
            obj.setRtnCode(ReturnInfoEnums.PROCESS_PARAMETER_ERROR.getCode());
            obj.setRtnMsg(bindingResult.getAllErrors().get(0).getDefaultMessage());
            return obj;
        }
        return obj;
    }
    
    
    
    
    
     //请求参数为复杂数据组合对象,嵌套实体字段验证
    
    @ApiOperation(value = "从业务平台获取卡片内容", notes = "卡片内容获取")
    @RequestMapping(value = "/cardInfoDetailtest", method = RequestMethod.POST)
    public Object getCardInfoDetailtemp(@Valid CardInfoDetail info,BindingResult bindingResult){
        OutputObjectCSF obj = new OutputObjectCSF();
          if (bindingResult.hasErrors()) {
            obj.setRtnCode(ReturnInfoEnums.PROCESS_PARAMETER_ERROR.getCode());
            obj.setRtnMsg(bindingResult.getAllErrors().get(0).getDefaultMessage());
            return obj;
        }
        return obj;
    }
    

    @2.swagger-ui.html页面接口数据验证对比

    QQ截图20180528190035.pngQQ截图20180528185356.png

    三、@pathvariable的校验

    spring-boot可能目前并不支持对参数的验证:
    public Result<?> xoById( @NotNull @NotBlank @Size(min=10,max=32)@PathVariable(value="accountId") String id) {}
    但目前还无法抛出异常, 可能在spring的下一个版本中解决,或者不用@Pathvariable,而在service中
    Class XoService{
    public xoMethon( @NotNull String id){
    }
    }
    来解决

    参考文献:java validation 后台参数验证

    ©著作权归作者所有:来自51CTO博客作者沉淀人生的原创作品,如需转载,请注明出处,否则将追究法律责任

  • 相关阅读:
    centos下nginx代理tomcat,使nginx同时支持php与jsp
    tomcat配置默认访问项目和HTTP端口号
    Nginx服务器之Nginx与tomcat结合访问jsp
    Windows下Nginx的启动、停止等命令
    bootstrap之navbar
    EL与JSTL
    用网页计数器来说明application和session
    cookie,session以及application的比较
    请求转发与重定向
    servlet 的生命周期
  • 原文地址:https://www.cnblogs.com/suizhikuo/p/12394081.html
Copyright © 2020-2023  润新知