当前位置: 首页 > news >正文

从0开始搭建一个生产级SpringBoot2.0.X项目(五)使用 validation 验证参数

前言

最近有个想法想整理一个内容比较完整springboot项目初始化Demo。

使用 validation 验证参数

一、pom文件增加引入

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency>

二、新增接口入参实体类TestValidationReq.java

package com.murg.bootdemo.business.req;import lombok.Data;import javax.validation.Valid;
import javax.validation.constraints.*;
@Data
public class TestValidationReq {@Max(value=60,message = "age不能超过60")@Min(value=18,message = "age不能小于18")private String age;@NotBlank(message = "name不能为空或者空格")private String name;@Size(min=5, max=10,message = "content字符长度在5-100之间")private String content;}

三、TestRestController.java新增接口

增加验证的接口/testvalidation,入参@RequestBody表示接收json传递的实体bean入参,@Validated表示验证这个实体入参,BindingResult为验证的结果。

    @PostMapping("/testvalidation")public WebResult validation(@Validated @RequestBody TestValidationReq req, BindingResult results) {//把实体注解中的错误信息返回if (results.hasErrors()) {return WebResult.wrong( results.getFieldError().getDefaultMessage());}return WebResult.ok();}

四、测试

4.1 入参age传1

4.2 入参name传 ""

4.3 content传 "1"

五、递归校验

如果 入参TestValidationReq类中增加一个 reqVO 类的属性,而 reqVO 中的属性也需要校验,就用到递归校验了,只要在相应属性上增加@Valid注解即可实现(对于集合同样适用)

新建reqVO类

package com.murg.bootdemo.business.req;import lombok.Data;import javax.validation.constraints.NotBlank;
@Data
public class ReqVO {@NotBlank(message = "sex不能为空")private String sex;
}

TestValidationReq字段增加reqVO 字段加@Valid注解 进行递归校验

package com.murg.bootdemo.business.req;import lombok.Data;import javax.validation.Valid;
import javax.validation.constraints.*;
@Data
public class TestValidationReq {@Max(value=60,message = "age不能超过60")@Min(value=18,message = "age不能小于18")private String age;@NotBlank(message = "name不能为空或者空格")private String name;@Size(min=5, max=10,message = "content字符长度在5-100之间")private String content;@Validprivate ReqVO reqVO;}

测试递归校验 入参 sex 传空


http://www.mrgr.cn/news/61566.html

相关文章:

  • 开源一款前后端分离的企业级网站内容管理系统,支持站群管理、多平台静态化,多语言、全文检索的源码
  • day03|计算机网络重难点之HTTP中常见的状态码、什么是强缓存和协商缓存
  • 搞自动化PLC的都懂的十五个基础知识点
  • Java面试题集锦
  • 详解PHP正则表达式中的转义操作
  • 【面试】rabbitmq的主要组件有哪些?
  • C++核心编程和桌面应用开发 第十七天(set和multiset容器 pair map和multimap容器)
  • Json库和文件操作
  • Cargo 的工作机制
  • 一道巧妙的卡特兰数建模
  • 聊聊解构的那些事
  • 本篇文章来介绍下dockerfile
  • LeetCode 热题 100 回顾2
  • Golang | Leetcode Golang题解之第519题随机翻转矩阵
  • 速盾:海外高防CDN有哪些优势?
  • SpringBoot篇(自动装配原理)
  • 〈壮志凌云:独行侠〉中的超高音速战机
  • Android Studio 无法查看Kotlin源码的解决办法
  • 了解一下,RN中怎么加载 threejs的
  • openEuler 系统中单引号、双引号及转义字符的应用
  • Topaz Video AI for Mac 视频无损放大软件安装教程【保姆级,操作简单轻松上手】
  • 如何解决 Ansys Electronics Desktop 中的 HPC Pack 许可错误
  • C++引用的属性
  • 如何在 CentOS VPS 上设置系统监控的邮件警报
  • 嫉妒经济学:揭秘消费行为背后的情绪驱动力
  • LeetCode Hot 100:技巧