springboot参数校验注解

在controller层需要对前端传来的参数进行校验

校验简单数据类型

使用springboot自带的validation工具可以从后端对前端传来的数据进行校验

使用方法:

  1. 创建项目时引入I/O场景下的validation起步依赖
  2. 使用maven创建项目时,引入起步依赖:
        <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
  1. 添加注解@Validated控制器开启参数校验功能
  2. 在参数前添加校验标准的注解,判断参数
注解 作用
@NotNull 判断包装类是否为null
@NotBlank 判断字符串是否为null或者是空串(去掉首位空格)
@NotEmpety 判断集合是否为空
@Length 判断字符的长度(最大或最小)
@Min 判断数值最小值
@Max 判断数值最大值
@Email 判断邮箱是否合法

例如:

    @RequestMapping("/t2")
@ResponseBody
public String t2(@NotBlank @Length(min = 1,max = 5) String username,
@NotNull @Min(0) @Max(50) Integer age,
@NotEmpty @RequestParam List<String> address,
@NotBlank @Email String email){
System.out.println(username);
System.out.println(age);
System.out.println(address);
System.out.println(email);
return "请求成功";
}

异常处理

当抛出ConstraintViolationException异常时,可以使用SpringMVC的异常处理器处理异常,也可以使用springboot的异常处理器。

springboot使用BasicErrorController来进行异常处理,当出现异常时,会跳转到resources/templates/error.html,只需要对error.html进行编辑就可以处理,当然后台还是会报异常的,如果需要详细的处理异常,那么就需要采用SpringMVC的异常处理器来处理了

校验对象类型参数

校验对象类型参数,实际是判断传来对象的属性

使用方法:

  1. 在对象属性前添加校验标准
  2. 在对象参数前添加注解@Validated,并将异常信息封装到BindingResult对象中

例如:

public class User {

    @NotBlank(message = "用户名不能为空")
private String username;
@NotNull(message = "id不能为空")
private int id; @Override
public String toString() {
return "User{" +
"username='" + username + '\'' +
", id=" + id +
'}';
} public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} public int getId() {
return id;
} public void setId(int id) {
this.id = id;
}
}
    @RequestMapping("/t3")
@ResponseBody
public String t3(@Validated User user, BindingResult result){ //判断是否有异常
if (result.hasErrors()){
List<ObjectError> list = result.getAllErrors();
for (ObjectError err:list
) {
FieldError fieldError = (FieldError) err;
System.out.println(fieldError.getDefaultMessage());
} throw new RuntimeException("参数验证");
} System.out.println(user);
return "请求成功";
}

注意:对对象参数进行校验时不需要给controller添加@Validated注解,只需要给对象参数添加注解就可以,校验标准应该添加在对象的属性中

Springboot——参数校验的更多相关文章

  1. 补习系列(4)-springboot 参数校验详解

    目录 目标 一.PathVariable 校验 二.方法参数校验 三.表单对象校验 四.RequestBody 校验 五.自定义校验规则 六.异常拦截器 参考文档 目标 对于几种常见的入参方式,了解如 ...

  2. springboot 参数校验详解

    https://www.jianshu.com/p/89a675b7c900 在日常开发写rest接口时,接口参数校验这一部分是必须的,但是如果全部用代码去做,显得十分麻烦,spring也提供了这部分 ...

  3. SpringBoot 参数校验的方法

    Introduction 有参数传递的地方都少不了参数校验.在web开发中,前端的参数校验是为了用户体验,后端的参数校验是为了安全.试想一下,如果在controller层中没有经过任何校验的参数通过s ...

  4. springmvc、springboot 参数校验

    参数校验在项目中是必不可少的,不仅前端需要校验,为了程序的可靠性,后端也需要对参数进行有效性的校验.下面将介绍在springmvc或springboot项目中参数校验的方法 准备工作: 引入校验需要用 ...

  5. SpringBoot 参数校验

    一.添加依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId> ...

  6. springboot参数校验

    为了能够进行嵌套验证,必须手动在Item实体的props字段上明确指出这个字段里面的实体也要进行验证.由于@Validated不能用在成员属性(字段)上,但是@Valid能加在成员属性(字段)上,而且 ...

  7. springboot学习-jdbc操作数据库--yml注意事项--controller接受参数以及参数校验--异常统一管理以及aop的使用---整合mybatis---swagger2构建api文档---jpa访问数据库及page进行分页---整合redis---定时任务

    springboot学习-jdbc操作数据库--yml注意事项--controller接受参数以及参数校验-- 异常统一管理以及aop的使用---整合mybatis---swagger2构建api文档 ...

  8. springboot项目--传入参数校验-----SpringBoot开发详解(五)--Controller接收参数以及参数校验----https://blog.csdn.net/qq_31001665/article/details/71075743

    https://blog.csdn.net/qq_31001665/article/details/71075743 springboot项目--传入参数校验-----SpringBoot开发详解(五 ...

  9. springboot 接口参数校验

    前言 在开发接口的时候,参数校验是必不可少的.参数的类型,长度等规则,在开发初期都应该由产品经理或者技术负责人等来约定.如果不对入参做校验,很有可能会因为一些不合法的参数而导致系统出现异常. 上一篇文 ...

  10. Java web服务端参数校验Javax.validation (springboot)

    一.基本使用 Javax.validation是spring集成自带的一个参数校验接口.可通过添加注解来设置校验条件. 下面以springboot项目为例进行说明.创建web项目后,不需要再添加其他的 ...

随机推荐

  1. mybatisplus数据层标准开发---分页功能

    1.创建一个拦截器类 package com.itheima.config; import com.baomidou.mybatisplus.extension.plugins.MybatisPlus ...

  2. 磁盘IO 基本常识

    计算机硬件性能在过去十年间的发展普遍遵循摩尔定律,通用计算机的 CPU主频早已超过3GHz,内存也进入了普及DDR4的时代.然而传统硬盘虽然在存储容量上增长迅速,但是在读写性能上并无明显提升,同时SS ...

  3. VirtualBox下宿主机和Linux虚拟机共享文件配置方法

    VirtualBox版本-5.2.8 Linux版本-Ubuntu16.04 2020.03.31 一.首先在宿主机上新建一个文件夹,这里命名为共享文件夹(如果读者自行命名记得后文全部替换),存放了一 ...

  4. vue3中watch的写法大合集。

    VUE2的watch是一个属性写法是 watch:{ data1(newVal,oldVal){ 同步/异步操作 } } VUE3的watch则是一个函数,写法是 注意数据必须是响应式的 let nu ...

  5. argparser Python包使用

    argparser Python包使用 导入 import argparse 定义parser对象(参数为介绍) parser = argparse.ArgumentParser('test pars ...

  6. 时隔十年,QQ更新了Linux版本

    昨天1024程序员节,QQ悄悄地更新了QQ for Linux,也许是给各位一个惊喜吧. 官网及其的简陋.和一个Word文档似的. 十年一更,有网友称,瞬间回到QQ2006,确实界面功能有些落后,相信 ...

  7. python过滤列表元素

    li = [1, 2, 3, 4, 5, 6] def fun(item, num): if item == num: return 1 else: return 0 def fun1(item, n ...

  8. Java学习笔记03

    1. 流程控制语句 在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的.所以,我们必须清楚每条语句的执行流程.而且,很多时候要通过控制语句的执行顺序来实现我们想要的功能. 1.1 分 ...

  9. DRF版本控制(源码分析)

    DRF中版本控制的五种情况(源码分析) 在restful规范中要去,后端的API中需要体现版本. drf框架中支持5种版本的设置. 1. URL的GET参数传递(*) 示例: user/?versio ...

  10. Puppeteer+RabbitMQ:Node.js 批量加工pdf服务架构设计与落地

    全文约8500字,阅读时长约10分钟. 智慧作业最近上线「个性化手册」(简称个册)功能,一份完整的个性化手册分为三部分: •学情分析:根据学生阶段性的学习和考试情况进行学情分析.归纳.总结,汇总学情数 ...