springBoot 中参数校验 BindingResult 的使用 和 Result 为0 errors的注意点

有时候@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	 
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值