springBoot 中参数校验 BindingResult 的使用 和 Result 为0 errors的注意点_sping 校验数据 service bindingresult_奋斗⁹⁸的博客-程序员秘密

技术标签: spring boot  java  springboot  

有时候@Valid并没有触发验证,将BindingResult errors打印出来显示的是0 errors
这个时候需要检测下你是不是引用了注解@NotNull:不能为null,但可以为empty(""," "," ") …
当你接收到“”空字符串的情况下 会判定为empty ,并不是null 所以是不会触发的 也就是0 errors

当你需要判段为空的接收参数比较多的时候,这种注解的方式还是非常方便的
1.引入Vo

public class UserScheduleVo  {
    


	@NotBlank(message = "赛事不能为空")
	private String matchEventName; // 赛事名称
 
	@NotBlank(message = "发枪时间不能为空")
	@Pattern(regexp = "((([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29))\\s([0-1][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$", message = "发枪格式错误")
	private String gunTime; // 发枪时间
	
	@NotNull(message = "国家ID不能为空")
	@Min(value = 0,message = "国家ID数据格式错误")
	private int dicCountryId; // 国家ID
	
	@NotBlank(message = "国家名称不能为空")
	private String countryName; // 国家名称
	
	@NotNull(message = "省份ID不能为空")
	@Min(value = 0,message = "省份ID数据格式错误")
	private int dicProvinceId; // 省份ID
	@NotBlank(message = "省份名称不能为空")
	private String provinceName; // 省份名称
	
	@NotNull(message = "城市ID不能为空")
	@Min(value = 0,message = "城市ID数据格式错误")
	private int dicCityId; // 城市ID
	@NotBlank(message = "城市名称不能为空")
	private String cityName; // 城市名称

}
  1. 编写 Controller这里需要注意的问题:@Valid和@RequestBody是有位置关系的,必须@Valid在前面。BindingResult bindingResult作为参数传递进来,然后通过validate校验参数,并设置统一的返回结果。
@Controller
@RequestMapping("testController/*")
public class TestController {
    
 
    @RequestMapping(value = "tstex", method = RequestMethod.POST, produces = "application/json;charset=UTF-8")
	@ApiOperation(value = "测试异常方法", notes = "测试异常方法")
	public @ResponseBody String tstex(@Valid @RequestBody UserScheduleVo  userScheduleVo  ,
			BindingResult bindingResult) {
    
	
 		//每次只能返回其中的第一个错误
 		//如果都要返回 需要下方的3遍历进行拼接返回,或者map集合返回
		if (results.hasErrors()){
    
            return R(1001,results.getFieldError().getDefaultMessage());
        }
		return R();
	}

3.遍历所有错误的信息

//有错误信息,就遍历出所有的错误信心,放在map中
if (result.hasErrors()) {
    
	Map err = new HashMap();
		List list = result.getFieldErrors();
		FieldError error = null;
		for (int i = 0; i < list.size(); i++) {
    
			error = list.get(i);
			err.put(error.getField(), error.getDefaultMessage());
		}
		//仍在request中,jsp页面可以直接获取。
		request.setAttribute("errfields", err);
}

4.注解文档说明

限制注解	说明	限制类型	样例
@Null	限制只能为null	全部	@Null(message="")
@NotNull	限制必须不为null	全部	@NotNull(message="")
@AssertFalse	限制必须为false	 	 
@AssertTrue	限制必须为true	 	 
@DecimalMax(value)	限制必须为一个不大于指定值的数字	 	 
@DecimalMin(value)	限制必须为一个不小于指定值的数字	 	 
@Digits(integer,fraction)	限制必须为一个小数,且整数部分的位数不能超过integer,小数部分的位数不能超过fraction	 	 
@Future	限制必须是一个将来的日期	 	 
@Max(value)	限制必须为一个不大于指定值的数字	int	@Max(value=100,message="")
@Min(value)	限制必须为一个不小于指定值的数字	int	@Min(value=100,message="")
@Past	限制必须是一个过去的日期	 	 
@Pattern(value)	限制必须符合指定的正则表达式	String	
@Pattern(regexp="",message="")

@Size(max,min)	限制字符长度必须在min到max之间	 	 
@NotEmpty	验证注解的元素值不为null且不为空(字符串长度不为0、集合大小不为0)	String	
@NotEmpty(message = "")

@NotBlank	验证注解的元素值不为空(不为null、去除首位空格后长度为0),不同于@NotEmpty,@NotBlank只应用于字符串且在比较时会去除字符串的空格	String	
@NotBlank(message = "")

@Email	验证注解的元素值是Email,也可以通过正则表达式和flag指定自定义的email格式	String	 
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/fenduo/article/details/109389355

智能推荐

CSS实现三栏自适应布局(两边宽度固定,中间自适应)_chelflan的博客-程序员秘密

&amp;nbsp; &amp;nbsp; 所谓三列自适应布局指的是两边定宽,中间block宽度自适应。这道题在今年网易内推前端工程师面试的时候也被问到。 我这里主要分为两大类,一类是基于position传统的实现,一类是基于css3新特性弹性盒模型布局实现。&amp;nbsp;1. 基于传统的position和margin等属性...

第三章——调制信号的功率谱_频率调制功率谱_小菜菜forever的博客-程序员秘密

1. 线性数字调制信号(PAM、PSK、QAM)的功率谱当消息符号为实数,且互不相关时:2. CPFSK、CPM的功率谱

EduCoder Linux 文件/目录管理_educoder中linux文件目录__大峰_的博客-程序员秘密

Linux中一切皆为文件,不像Windows一样有各个磁盘,Linux中的磁盘也是可以当做文件来进行处理的,通常磁盘是被挂载到/dev目录下。Linux系统新手很难理解它引用文件和目录的方式,对于习惯于Windows 操作系统方式人来说更是如此,在深入学习Linux系统前,首先要了解下它与Windows不同之处。第一个不同之处是,Linux中的路径名不使用驱动器盘符,而Windows则是为每个磁盘驱动分配一个盘符。第二个不同之处是,Linux中只有一个根目录,而Window可以存在多个磁盘盘符,而不是

windows idea控制台中文乱码解决[email protected]的博客-程序员秘密

在windows Intellij idea 控制台下乱码通过以下几种方式处理:1.File Encodings2.java compiler3.tomcat 设置到此,还是不能解决我的控制台中文乱码,上面涉及的应该是项目的编码,idea本身的编码也要修改一下,打开idea安装的位置找到:idea64.exe.vmoptions 增加一个配置-Dfile.encoding=UTF-8,然后重启idea,-Xms128m-Xmx750m-XX:ReservedCodeCacheSize

(转) Java Collections.EMPTY_LIST 和 Collections.emptyList()的区别_tamink2013的博客-程序员秘密

Collections.EMPTY_LIST返回的是一个空的List。为什么需要空的List呢?有时候我们在函数中需要返回一个List,但是这个List是空的,如果我们直接返回null的话,调用者还需要进行null的判断,所以一般建议返回一个空的List。(编者注:比如,用到list.size(),这个时候会忘记也很麻烦,再判断是否为空。不像循环,肯定会判断是否为空 。所以不要return n...

P2P网络基础(学习笔记)_基础p2p是什么意思_yeaqqqq的博客-程序员秘密

P2P网络基础(学习笔记)基本概述P2P与C/S架构P2P网络的特点P2P网络的主要功能P2P网络的分类集中式全分布式非结构化全分布式结构化混合式比特币网络P2P网络的应用基本概述P2P(peer-to-peer)网络又称为对等式网络,或者点对点网络。这是一种无中心的服务器、完全由用户群进行交换信息的互联网体系,P2P网络的每一个用户即是一个客户端,同时也具备服务器的功能。它的定义是:网络的参与者共享他们所拥有的一部分硬件资源(处理能力、存储能力、网络连接能力、打印机等),这些共享资源通过网络提供服务

随便推点

7-2 模拟EXCEL排序 (25分) PTA_一只幽灵飘过的博客-程序员秘密

7-2 模拟EXCEL排序 (25分)Excel可以对一组纪录按任意指定列排序。现请编写程序实现类似功能。输入格式:输入的第一行包含两个正整数N(≤10​5​​ ) 和C,其中N是纪录的条数,C是指定排序的列号。之后有 N行,每行包含一条学生纪录。每条学生纪录由学号(6位数字,保证没有重复的学号)、姓名(不超过8位且不包含空格的字符串)、成绩([0, 100]内的整数)组成,相邻属性用1个空格隔开。输出格式:在N行中输出按要求排序后的结果,即:当C=1时,按学号递增排序;当C=2时,按姓名的非

微信小程序上传图片或文件时报错Provisional headers are shown_Qyq0498的博客-程序员秘密

小程序上传文件的时候报错,调用同一个接口PC端正常,小程序也设置了不校验合法域名,就初步确定跟https,ssl证书以及域名是否备案什么的都没有关系了解决方案:查询小程序官方文档发现,需要设置请求头,问题解决,接口正常访问!...

DROP TABLE IF EXISTS `ay_admin` ;_遇到问题的博客-程序员秘密

导入数据库一直出现标题错误,但是数据库是没错的。如图:这是因为你要先新建这个数据库名,然后再该名下导入数据库文件,就可以了。

matlab 简单形态滤波(SMRF)算法地面分割_点云侠的博客-程序员秘密

[1] Pingel, Thomas J., Keith C. Clarke, and William A. McBride. “An Improved Simple Morphological Filter for the Terrain Classification of Airborne LIDAR Data.” ISPRS Journal of Photogrammetry and Remote Sensing 77 (March 2013): 21–30.

Java编号是什么数据类型_Java数据类型及转换_魏万平的博客-程序员秘密

1.数据类型1.1什么是数据类型百度百科:数据类型在数据结构中的定义是一个值的集合以及定义在这个值集上的一组操作。1. 简单理解: Java对数据进行了分类,存在不同的类型2. 为什么需要数据分类:不同的数据类型占用的存储空间不一样,为了更好的利用计算机内存空间在Java 的领域里,1. 基本数据类型变量:存的是数据值本身,2. 引用数据类型变量:存的是保存数据的内存空间地址。学习数据类...

Cisco三层交换机的配置详解_weixin_34015566的博客-程序员秘密

当公司网络规模较小、划分的VLAN比较少时,可能单臂路由就可以满足各VLAN间的通信,但是当VLAN较多、网络规模比较大时。那么使用单臂路由技术就显得有点力不从心了,这是我们就要引入三层交换机了。现在大多数新型的catalyst交换机都支持CEF(Cisco快速转发)多层交换,CEF是一种基于拓扑的转发模型,可预先将所有的路由选择信息加入到FIB( forWord information ba...

推荐文章

热门文章

相关标签