广告
返回顶部
首页 > 资讯 > 精选 >Spring Boot项目传参校验的方法
  • 393
分享到

Spring Boot项目传参校验的方法

2023-06-29 20:06:07 393人浏览 八月长安
摘要

这篇文章主要讲解了“spring Boot项目传参校验的方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Spring Boot项目传参校验的方法”吧!场景还原简单业务场

这篇文章主要讲解了“spring Boot项目传参校验的方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Spring Boot项目传参校验的方法”吧!

场景还原

简单业务场景模拟:

假如你现在在做一个成绩录入系统,你愉快地用Spring Boot框架写了一个后台接口,用于接收前台浏览器传过来的 Student对象,并插入后台数据库

我们将传入的 Student对象定义为:

public class Student {    private String name;    // 姓名    private Integer score;  // 考试分数(满分100分)    private String mobile;  // 电话号码(11位)}

然后写一个Post请求的后台接口,来接收网页端传过来的 Student对象:

@RestControllerpublic class TestController {    @Autowired    private StudentService studentService;    @PostMapping("/add")    public String addStudent( @RequestBody Student student ) {        studentService.addStudent( student ); // 将student对象存入数据库        return "SUCCESS";    }}

此时我想你一定看出来了上面这段代码的漏洞,因为我们并没有对传入的 Student对象做任何数据校验,比如:

Student对象里三个字段的某一个忘传了,为 null怎么办?Student的 score分数,假如写错了,写成 101分怎么办?Student的 mobile11位手机号码,假如填错了,多写了一位怎么办?...等等

这些数据虽然在前端页面一般会做校验,但我们作为一个严谨且良心后端开发工程师,我们肯定要对传入的每一项数据做严格的校验,所以我们应该怎么写?

@PostMapping("/add")public String addStudent( @RequestBody Student student ) {    if( student == null )        return "传入的Student对象为null,请传值";    if( student.getName()==null || "".equals(student.getName()) )        return "传入的学生姓名为空,请传值";    if( student.getScore()==null )        return "传入的学生成绩为null,请传值";    if( (student.getScore()<0) || (student.getScore()>100) )        return "传入的学生成绩有误,分数应该在0~100之间";    if( student.getMobile()==null || "".equals(student.getMobile()) )        return "传入的学生电话号码为空,请传值";    if( student.getMobile().length()!=11 )        return "传入的学生电话号码长度有误,应为11位";    studentService.addStudent( student ); // 将student对象存入MySQL数据库    return "SUCCESS";}

写是写完了,就是感觉手有点酸,并且心有点累,这个 Student对象倒还好,毕竟内部仅3个字段,假如一个复杂的对象有30个字段怎么办?简直不敢想象!

神注解加持

其实Spring框架很早版本开始,就通过注解的方式,来方便地为我们提供了各项交互数据的校验工作,比如上面的例子,我们只需要在传入的 Student实体类的字段中加入对应注解即可方便的解决问题:

public class Student {    @NotNull(message = "传入的姓名为null,请传值")    @NotEmpty(message = "传入的姓名为空字符串,请传值")    private String name;    // 姓名    @NotNull(message = "传入的分数为null,请传值")    @Min(value = 0,message = "传入的学生成绩有误,分数应该在0~100之间")    @Max(value = 100,message = "传入的学生成绩有误,分数应该在0~100之间")    private Integer score;  // 分数    @NotNull(message = "传入的电话为null,请传值")    @NotEmpty(message = "传入的电话为空字符串,请传值")    @Length(min = 11, max = 11, message = "传入的电话号码长度有误,必须为11位")    private String mobile;  // 电话号码}

当然,于此同时,我们还需要在对象入口处,加上注解 @Valid来开启对传入 Student对象的验证工作:

@PostMapping("/add")public String addStudent( @RequestBody  @Valid Student student ) {    // 棒棒哒!原先各种繁杂的参数校验工作统统都省了!一行代码不用写    studentService.addStudent( student ); // 将student对象存入Mysql数据库    return "SUCCESS";}

这时候,如果某个字段传入错误,比如我传数据的时候,将学生的成绩误传为 101分,则接口返回结果便会提示出错误详情:

Spring Boot项目传参校验的方法

当然,关于这个事情的原理,既然用到了注解,无非用的也就是Java里的各种反射等知识来实现的,感兴趣的小伙伴可以借此机会研究一下!

数据异常统一拦截

上面利用注解的方式做统一数据校验感觉十分美好,但唯一美中不足的就是返回的结果太过繁杂,不一定使我们需要的格式,我们需要做统一处理,比如:我只想将具体参数校验的错误提示信息给抠出来返回给前端即可。

为此,我们为项目配置全局统一异常拦截器来格式化所有数据校验的返回结果。

@ControllerAdvice@ResponseBodypublic class GlobalExceptionInterceptor {  @ExceptionHandler(value = Exception.class)  public String exceptionHandler(httpservletRequest request, Exception e) {    String failMsg = null;    if (e instanceof MethodArgumentNotValidException) {      // 拿到参数校验具体异常信息提示      failMsg = ((MethodArgumentNotValidException) e).getBindingResult().getFieldError().getDefaultMessage();    }    return failMsg; // 直接吐回给前端  }}

如上面代码所示,我们全局统一拦截了参数校验异常 MethodArgumentNotValidException,并仅仅只拿到对应异常的详细 Message信息吐给前端,此时返回给前端的数据就清楚得多:

Spring Boot项目传参校验的方法

感谢各位的阅读,以上就是“Spring Boot项目传参校验的方法”的内容了,经过本文的学习后,相信大家对Spring Boot项目传参校验的方法这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: Spring Boot项目传参校验的方法

本文链接: https://www.lsjlt.com/news/326341.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Spring Boot项目传参校验的方法
    这篇文章主要讲解了“Spring Boot项目传参校验的方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Spring Boot项目传参校验的方法”吧!场景还原简单业务场...
    99+
    2023-06-29
  • Spring Boot项目传参校验的最佳实践指南
    目录场景还原神注解加持数据异常统一拦截总结场景还原 简单业务场景模拟: 假如你现在在做一个成绩录入系统,你愉快地用Spring Boot框架写了一个后台接口,用于接收前台浏览器传过来...
    99+
    2022-11-13
  • 详解如何在Spring Boot项目使用参数校验
    开发web项目有时候我们需要对controller层传过来的参数进行一些基本的校验,比如非空,非null,整数值的范围,字符串的个数,日期,邮箱等等。最常见的就是我们直接写代码校验,这样以后比较繁琐,而且不够灵活。Bean Validati...
    99+
    2023-05-31
    spring boot 参数校验
  • spring-boot-starter-validation 校验参数的实现
    目录一、前言二、常用注解三、定义分组四、定义需要校验的对象五、在handler 即 Controller中 校验六、定义全局异常处理类七、测试效果八、嵌套对象的校验九、自定义注解(自...
    99+
    2022-11-13
  • Spring Boot使用 Hibernate-Validator校验参数时的长度校验
    今天在使用Validator框架数据验证的时候碰到了三个类似的注解,都是用来限制长度,但是用法上有区别: 1,@Size和@Length @Datapublic class LoginVo { @Length(min = 5, ma...
    99+
    2023-09-26
    spring boot hibernate java
  • Spring Boot参数校验及分组校验的使用教程
    目录一  前言1  什么是validator二  注解介绍1  validator内置注解三  使用1  单参数校验2&n...
    99+
    2022-11-12
  • 怎么在Spring Boot项目中利用JSR-380进行校验
    怎么在Spring Boot项目中利用JSR-380进行校验?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。介绍JSR-380 是 J2EE 的一个规范,用于校验实体属性,它是 ...
    99+
    2023-06-06
  • Spring boot项目整合WebSocket方法
    WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket通信协议于2011年被IETF定为标准RFC 6455,并由RFC7936补充规范。WebSocke...
    99+
    2022-11-12
  • 浅谈spring方法级参数校验(@Validated)
    依赖的jar包: spring相关jar包版本:4.3.1.RELEASE <dependency> <groupId>org.hibernate...
    99+
    2022-11-12
  • Spring boot CommandLineRunner启动任务传参的方法
    这篇文章主要讲解了“Spring boot CommandLineRunner启动任务传参的方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Spring bo...
    99+
    2023-06-30
  • Spring Boot 控制层之参数传递方法详解
    当然,您自己创建一个项目也是可以的。 bean包下的Student.java package com.example.demo.bean; public class Studen...
    99+
    2022-11-12
  • 参数校验Spring的@Valid注解用法解析
    参数校验Spring的@Valid注解 @Valid 注解通常用于对象属性字段的规则检测。 以新增一个员工为功能切入点,以常规写法为背景,慢慢烘托出 @Valid 注解用法详解。 那...
    99+
    2022-11-12
  • Spring Boot项目搭建的两种方式
    目录什么是Spring Boot使用 Spring Boot有什么好处Spring Boot开发环境搭建方式1:官网配置生成方式2:IDEA中生成什么是Spring Boot Spr...
    99+
    2022-11-12
  • SpringBoot参数校验的方法总结
    目录一、前言二、注解介绍三、添加依赖四、创建用于校验的实体类五、写一个测试用的接口六、在实体类中添加注解七、在 controller 方法中添加 Validated 注解八、添加全局...
    99+
    2022-11-12
  • Spring Boot 项目集成Redis的方式详解
    集成方式 使用Jedis Jedis是Redis官方推荐的面向Java的操作Redis的客户端,是对服务端直连后进行操作。如果直接使用Jedis进行连接,多线程环境下是非线程安全的...
    99+
    2022-11-12
  • Spring Boot创建项目的方式有哪些
    这篇文章主要介绍了Spring Boot创建项目的方式有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Spring Boot创建项目的方式有哪些文章都会有所收获,下面我们一起来看看吧。一...
    99+
    2023-06-30
  • intellij idea 2021.2 打包并上传运行spring boot项目的详细过程(spring boot 2.5.4)
    目录一在idea中打开项目:二上传jar包到服务器并运行:三查看intellij idea的版本:四查看spring boot的版本:五查看服务端的java版本:一在idea中打开项...
    99+
    2022-11-12
  • idea项目全局去掉严格的语法校验方式
    目录idea项目全局去掉严格的语法校验解决idea无法提示代码、不检查语法的方法总结idea项目全局去掉严格的语法校验 最近小编将开发工具由用了将近4年的Eclipse换到Itell...
    99+
    2023-05-18
    idea全局 全局去掉语法校验 idea去掉语法校验
  • spring boot在启动项目之后执行的实现方法
    前言我们在web项目启动之后有时候还会做点其它的东西(比如,导入数据脚本),下面就说说spring-boot里怎么在程序启动后加入自己要执行的东西方法如下:新建一个类:BeforeStartup.java@Configurationpubl...
    99+
    2023-05-31
    spring boot 启动后执行
  • 新鲜速递:Spring Boot 3 项目快速集成 Spring Security 6的方法
    准备 Spring Boot 3正式版本已发版了半个月,Spring Security6也一并更新,但是网络上的相关中文文档较少,盲目进行集成容易出错,所以本文讲如何快速集成。这里不再赘述Spring Boot3和Spring Securi...
    99+
    2023-08-25
    spring spring boot java
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作