Spring MVC数据校验

这篇具有很好参考价值的文章主要介绍了Spring MVC数据校验。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一般情况下,用户的输入是随意的,为了保证数据的合法性,数据验证是所有 Web 应用必须处理的问题。

Spring MVC 有以下两种方法可以验证输入:

  • 1.利用 Spring 自带的验证框架(复杂,推荐spring-boot-starter-validation)

  • 2.利用 JSR 303 实现

数据验证分为客户端验证和服务器端验证,

客户端验证主要是过滤正常用户的误操作,通过 JavaScript 代码完成。

服务器端验证是整个应用阻止非法数据的最后防线,通过在应用中编程实现。

本节使用 JSR 303 实现服务器端的数据验证

JSRJSR

是Java Specification Requests的缩写,意思是Java 规范提案,

是指向JCP(Java Community Process)提出新增一个标准化技术规范的正式请求。

任何人都可以提交JSR,以向Java平台增添新的API和服务。JSR已成为Java界的一个重要标准。关于 JSR-303JSR-303 是JAVA EE 6 中的一项子规范,叫做Bean Validation,Hibernate Validator 是 Bean Validation 的参考实现,Hibernate Validator 提供了 JSR 303 规范中所有内置 constraint 的实现,除此之外还有一些附加的 constraint

JSR 303 是 Java 为 Bean 数据合法性校验所提供的标准框架。JSR 303 通过在 Bean 属性上标注类似于 @NotNull、@Max 等标准的注解指定校验规则,并通过标准的验证接口对 Bean 进行验证。可以通过 The Java Community Process(SM) Program - JSRs: Java Specification Requests - detail JSR# 303 查看详细内容并下载 JSR 303 Bean Validation。

JSR 303 不需要编写验证器,它定义了一套可标注在成员变量、属性方法上的校验注解,如下表所示。只针对对象属性的校验

注解 含义
@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附加的constraint
@NotBlank(message =) 验证字符串非null,且长度必须大于0
@Email 被注释的元素必须是电子邮箱地址
@Length(min=,max=) 被注释的字符串的大小必须在指定的范围内
@NotEmpty 被注释的字符串的必须非空
@Range(min=,max=,message=) 被注释的元素必须在合适的数字范围内

Spring MVC 支持 JSR 303 标准的校验框架,Spring 的 DataBinder 在进行数据绑定时,可同时调用校验框架来完成数据校验工作,(当发生错误时候触发BindException)非常简单方便。在 Spring MVC 中,可以直接通过注解驱动的方式来进行数据校验。

Spring 本身没有提供 JSR 303 的实现,Hibernate Validator 实现了 JSR 303,所以必须在项目中加入来自 Hibernate Validator 库的 jar 文件,下载地址为 The Bean Validation reference implementation. - Hibernate Validator

maven依赖

<dependency>
    <groupId>org.hibernate.validator</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>6.2.3.Final</version>
</dependency>

效验:在product类中对实体进行效验

private Integer id;
    @NotEmpty(message = "name不能为空")
    private String name;

    private BigDecimal price;
    //第一种方式:
    //@Min(value=5,message="数量最小为5")    
    //@MAx(value=100,message="数量最大为100")
    //第二种方式
    @Range(min = 5,max = 10,message = "大小必须在这个范围内")
    private Integer qty;
    private List<String> address;
    private String email;
    private String idCard;

在TeacherController中编辑controller:

@RestController
@RequestMapping("/api/teacher")
public class TeacherController {
    // 做数据效验 必须加上这个 @Valid注解 不然不显示结果
    @PostMapping
    public Integer insert(@RequestBody @Valid Product product){
        return 1;
    }
}

运行测试:

把拦截器给注释掉:运行测试一下:

Spring MVC数据校验,springmvc,开发语言,spring,java

如果想在控制台显示异常信息,可以debug一下看看是什么异常

异常配置:第一种方式:统一的处理

 @ExceptionHandler(BindException.class)
    public String processException(BindException e){
        BindingResult result = e.getBindingResult();
        StringBuilder sb=new StringBuilder();
        List<ObjectError> allError=result.getAllErrors();
        for (ObjectError error : allError) {
            sb.append(error.getDefaultMessage());
        }
        return sb.toString();
    }

测试运行:

第二种方式:使用自己的异常处理类 让异常信息返回json类型:

 @ExceptionHandler(Exception.class)
    public Object error( Exception e){
        int code=666;
        if(e instanceof BizException){
            BizException biz= (BizException) e;
            code=biz.getCode();
        }
        // 使用自己的异常处理
        if(e instanceof MethodArgumentNotValidException){
            StringBuilder sb = new StringBuilder();           
  List<ObjectError> allErrors = ( (MethodArgumentNotValidException) e).getBindingResult().getAllErrors();
            
            for(ObjectError error : allErrors){
                sb.append(error.getDefaultMessage());
            }
            return   ResponseDTO.error(888,sb.toString());
        }
        
        return   ResponseDTO.error(code,e.getMessage());
    }

测试访问:

Spring MVC数据校验,springmvc,开发语言,spring,java

正则表达式在线工具:正则表达式在线测试 | 菜鸟工具

max,min的用法

 @Min(value = 5,message = "数量最小为5")
    @Max(value = 100,message = "数量最大为100")
    private Integer qty;

测试:

Spring MVC数据校验,springmvc,开发语言,spring,java

邮箱验证: 必须结合非空约束

  @Email
    @NotEmpty
    private String email;

​测试

Spring MVC数据校验,springmvc,开发语言,spring,java

 身份证:正则表达式验证

@Pattern(regexp = "(^\\d{15}$)|(^\\d{18}$)|(^\\d{17}(\\d|X|x)$)", message = "身份号不合法请输入18位数字")
    private String idCard;

Spring MVC数据校验,springmvc,开发语言,spring,java文章来源地址https://www.toymoban.com/news/detail-555302.html

到了这里,关于Spring MVC数据校验的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring MVC 之MVC 体系结构、什么是SpringMVC

    三层架构 我们的开发架构⼀般都是基于两种形式,⼀种是 C/S 架构,也就是客户端/服务器;另⼀种是 B/S 架构,也就是浏览器服务器。在 JavaEE 开发中,⼏乎全都是基于 B/S 架构的开发。那么在 B/S 架构中,系统标准的三层架构包括:表现层、业务层、持久层。 三层架构中,每

    2024年02月09日
    浏览(51)
  • 【SpringMVC】Spring Web MVC入门(一)

    前面我们了解了什么是Spring,那么今天我将为大家分享一种在日常网站开发中使用非常广泛的框架——Spring Web MVC。 先来看看官方解释。 Spring Web MVC是Spring Framework提供的Web组件,它是一个MVC设计模式的框架,主要用于开发灵活、松散耦合的Web应用程序。它提供了模型-视图-控

    2024年02月05日
    浏览(44)
  • java spring MVC之RESTful快速开发

    我这里有个一springboot项目 我在启动类同目录下创建了一个目录 目录名叫 controller 里面有一个UserController diam结构是这样的 这是一个基础的REST风格风格开发 但其实 我们可以很大程度的简化 这里 我先启动项目 然后用Postman测试 这些都是可以正常访问 和 调用返回的 确认无误之

    2024年02月05日
    浏览(42)
  • 【SpringMVC】基于 Spring 的 Web 层MVC 框架

    🎄欢迎来到@边境矢梦°的csdn博文🎄 🎄本文主要梳理SpringMVC : 基于 Spring 的 Web 层MVC 框架 🎄 🌈我是边境矢梦°,一个正在为秋招和算法竞赛做准备的学生🌈 🎆喜欢的朋友可以关注一下 🫰🫰🫰 ,下次更新不迷路🎆 Ps: 月亮越亮说明知识点越重要 (重要性或者难度越大

    2024年02月08日
    浏览(42)
  • Java EE 突击 11 - Spring MVC 程序开发 (2)

    这个专栏给大家介绍一下 Java 家族的核心产品 - SSM 框架 JavaEE 进阶专栏 Java 语言能走到现在 , 仍然屹立不衰的原因 , 有一部分就是因为 SSM 框架的存在 接下来 , 博主会带大家了解一下 Spring、Spring Boot、Spring MVC、MyBatis 相关知识点 并且带领大家进行环境的配置 , 让大家真正用好

    2024年02月13日
    浏览(74)
  • Java EE 突击 10 - Spring MVC 程序开发 (1)

    这个专栏给大家介绍一下 Java 家族的核心产品 - SSM 框架 JavaEE 进阶专栏 Java 语言能走到现在 , 仍然屹立不衰的原因 , 有一部分就是因为 SSM 框架的存在 接下来 , 博主会带大家了解一下 Spring、Spring Boot、Spring MVC、MyBatis 相关知识点 并且带领大家进行环境的配置 , 让大家真正用好

    2024年02月13日
    浏览(49)
  • SpringMVC-2-Spring MVC拦截器详解:从入门到精通

    能够编写拦截器并配置拦截器 1.1 拦截器概念和作用 拦截器(Interceptor)是一种动态拦截方法调用的机制,在SpringMVC中动态拦截控制器方法的执行 作用: 在指定的方法调用前后执行预先设定的代码 阻止原始方法的执行 总结:增强 核心原理:AOP思想 1.2 拦截器和过滤器的区别

    2024年02月12日
    浏览(50)
  • SpringMVC-1-解密Spring MVC:构建优雅、灵活的Web应用的秘诀

    能够编写SpringMVC入门案例 了解SpringMVC原理 思考:SpringMVC框架有什么优点? SpringMVC是一种基于Java实现MVC模型的轻量级Web框架 优点 使用简单,开发便捷(相比于Servlet) 天然的与Spring框架集成(如IOC容器、AOP等) 请求处理简化:支持用户请求数据自动映射封装 响应处理简化:

    2024年02月12日
    浏览(45)
  • Java开发之框架(spring、springmvc、springboot、mybatis)【面试篇 完结版】

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 本文主要记录spring的单例bean、切面编程AOP、spring事务、循环依赖、常见注解等 提示:以下是本篇文章正文内容,下面案例可供参考 ① 问题引入 Spring框架中的bean是单例的 singleton :bean在每个Spring IOC容

    2024年02月07日
    浏览(54)
  • (第六天)初识Spring框架-SSM框架的学习与应用(Spring + Spring MVC + MyBatis)-Java EE企业级应用开发学习记录

    ​ 昨天我们已经把Mybatis框架的基本知识全部学完,内容有Mybatis是一个半自动化的持久层ORM框架,深入学习编写动态SQL,Mybatis的关联映射,一对一、一对多、多对多、Mybatis的缓存机制,一二级缓存的开启和设置,缓存命中率、如何使用idea链接数据库自动生成pojo类等。我们学

    2024年02月10日
    浏览(67)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包