资讯专栏INFORMATION COLUMN

使用jsr303规范验证数据

Pandaaa / 1495人阅读

摘要:我们有时需要对前端传过来的数据做校验,就可以使用。他可以使我们不用在每个编写校验代码,可以达到解耦的功能。本文环境为,框架使用。

我们有时需要对前端传过来的数据做校验,就可以使用spring validation。他可以使我们不用在每个Controller编写校验代码,可以达到解耦的功能。本文环境为jdk8,框架使用springboot 2.1.0.RELEASE。
1.添加依赖


    org.springframework.boot
    spring-boot-starter-validation

2.需要被校验的实体类

@Data
public class LoginVo {

    @Size(min=6,max = 12,message = "用户名不符合规范")
    String username;
    @NotBlank(message = "密码不能为空")
    String password;
}

3.Controller层,在参数Login前加上@Validated注解,表明需要spring对其进行校验

public JSONResult registerOrLogin(@Validated LoginVo loginVo)
 

JSR提供的校验注解:
@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=)  被注释的元素必须符合指定的正则表达式 
Hibernate Validator提供的校验注解:  
@NotBlank(message =)   验证字符串非null,且长度必须大于0    
@Email  被注释的元素必须是电子邮箱地址    
@Length(min=,max=)  被注释的字符串的大小必须在指定的范围内    
@NotEmpty   被注释的字符串的必须非空    
@Range(min=,max=,message=)  被注释的元素必须在合适的范围内   

4.如果前端传来的数值不符合标准,后端会报错,所以我们可以编写一个全局异常类来捕获这个参数绑定异常,从而给前端返回提示消息

@ControllerAdvice
@ResponseBody
public class GlobalExceptionHandler {

    @ExceptionHandler(value = Exception.class)//拦截所有异常
    public JSONResult exceptionHandler(HttpServletRequest request, Exception e){
        e.printStackTrace();
         if(e instanceof BindException) {
            BindException ex = (BindException)e;
            List errors = ex.getAllErrors();//绑定错误返回很多错误,是一个错误列表,只需要第一个错误
            ObjectError error = errors.get(0);
            String msg = error.getDefaultMessage();
            return JSONResult.errorMsg("用户名或密码格式错误");
        }else {
            return JSONResult.errorMsg("未知错误");
        }

    }
}

5.验证
前端:

后端:

如图,后端捕获了异常,并向前端返回了提示信息
6.我们还可以使用分组功能,是变量在某些场景需要被验证,而不是所有场景,增加灵活性。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/75171.html

相关文章

  • 记录_使用JSR303规范进行数据校验

    摘要:时间年月日星期三说明使用规范校验接口请求参数源码第一章理论简介背景介绍如今互联网项目都采用接口形式进行开发。该规范定义了一个元数据模型,默认的元数据来源是注解。 时间:2017年11月08日星期三说明:使用JSR303规范校验http接口请求参数 源码:https://github.com/zccodere/s... 第一章:理论简介 1-1 背景介绍 如今互联网项目都采用HTTP接口...

    187J3X1 评论0 收藏0
  • Spring Boot 2.0 @ConfigurationProperties 使用

    摘要:引言的一个便捷功能是外部化配置,可以轻松访问属性文件中定义的属性。本文将详细介绍的使用。 引言 Spring Boot的一个便捷功能是外部化配置,可以轻松访问属性文件中定义的属性。本文将详细介绍@ConfigurationProperties的使用。 配置项目POM 在pom.xml中定义Spring-Boot 为parent org.springframework.boot...

    mating 评论0 收藏0
  • 参数验证 @Validated 和 @Valid 的区别

    摘要:也就是说如果传的中有的为空或者是负数,入参验证不会检测出来。为了能够进行嵌套验证,必须手动在实体的字段上明确指出这个字段里面的实体也要进行验证。用在方法入参上无法单独提供嵌套验证功能。 来源:blog.csdn.net/qq_27680317/article/details/79970590整编:Java技术栈(公众号ID:javastack) Spring Validation验证框...

    lieeps 评论0 收藏0
  • SpringBoot 实战 (十五) | 服务端参数校验之一

    摘要:前言估计很多朋友都认为参数校验是客户端的职责,不关服务端的事。轻则导致服务器宕机,重则泄露数据。所以,这时就需要设置第二道关卡,服务端验证了。老项目的服务端校验不能为空不能为空看以上代码,就一个的校验就如此麻烦。 前言 估计很多朋友都认为参数校验是客户端的职责,不关服务端的事。其实这是错误的,学过 Web 安全的都知道,客户端的验证只是第一道关卡。它的参数验证并不是安全的,一旦被有心人...

    QiShare 评论0 收藏0
  • 使用spring validation 作为数据校验

    摘要:本文主要介绍在中自动校验的机制。引入依赖我们使用构建应用来进行演示。在中校验数据值得注意的地方参数前需要加上注解,表明需要对其进行校验,而校验的信息会存放到其后的中。层改写方法限定需要进行校验,而方法则不做限制。 简介 JSR303/JSR-349,hibernate validation,spring validation之间的关系。JSR303是一项标准,JSR-349是其的升级版...

    huangjinnan 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<