【Java】使用@Valid+BindingResult进行controller参数校验

@Valid

@Valid注解用于校验,所属的包: javax.validation.Valid.

你可以定义实体,在实体的属性上添加校验规则,在API接收数据时添加@Valid注解,这时你的实体将会开启一个校验的功能。

## 空检查

@NotEmpty:用在集合类上面;不能为null,而且长度必须大于0 

@NotBlank: 用在String上面;只能作用在String上,不能为null,而且调用trim()后,长度必须大于0 

@NotNull:用在基本类型上;不能为null,但可以为empty。

## 长度检查

@Size(min=,max=):验证对象(Array,Collection,Map,String)长度是否在给定的范围之内  

不要错用了异常类型,比如在int上不可用@size

@Length(min=, max=) : 只适用于String 类型

##  Booelan检查

@AssertTrue:   验证 Boolean 对象是否为 true  

@AssertFalse:  验证 Boolean 对象是否为 false 

##  日期检查

@Past: 验证 Date 和 Calendar 对象是否在当前时间之前  

@Future: 验证 Date 和 Calendar 对象是否在当前时间之后  

@Pattern: 验证 String 对象是否符合正则表达式的规则

##  数值检查

建议使用在Stirng,Integer类型,不建议使用在int类型上,因为表单值为"" 时无法转换为int,但可以转换为Stirng为"",Integer为null

@Min:  验证 Number 和 String 对象是否大等于指定的值  

@Max:  验证 Number 和 String 对象是否小等于指定的值  

@DecimalMax:  被标注的值必须不大于约束中指定的最大值. 这个约束的参数是一个通过BigDecimal定义的最大值的字符串表示.小数存在精度

@DecimalMin: 被标注的值必须不小于约束中指定的最小值. 这个约束的参数是一个通过BigDecimal定义的最小值的字符串表示.小数存在精度

@Digits:  验证 Number 和 String 的构成是否合法  

@Digits(integer=,fraction=):  验证字符串是否是符合指定格式的数字,interger指定整数精度,fraction指定小数精度。

BindingResult

Spring验证的错误返回

@Valid 和 BindingResult 是一一对应的,如果有多个@Valid,那么每个@Valid后面跟着的BindingResult就是这个@Valid的验证结果,顺序不能乱

1.首先在参数实体类上面加上相关的验证信息

public class PublicUserForm implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 手机号
     */
    @NotBlank(message = "{required}")
    @Pattern(regexp = RegexpConstant.MOBILE_REG, message = "{mobile}")
    private String telephone;

    /**
     * 密码
     */
    private String password;

2.controller层

 public ResponseResult regist(@Valid PublicUserForm publicUserForm, BindingResult bindingResult) throws Exception {

        //在这里,我们判断参数是否通过校验
        if (bindingResult.hasErrors()) {
            Map<String,String> errorMsg = new HashMap<>();
            for (FieldError item:bindingResult.getFieldErrors()) {
                errorMsg.put(item.getField(),item.getDefaultMessage());
            }
            //自定义的返回,并将错误信息返回
            return new ResponseResult(false,200, JSON.toJSONString(errorMsg),errorMsg);
        }

        PublicUser publicUser = publicUserService.regist(publicUserForm);
        return new ResponseResult(true,200,"访问成功!",null);
    }

原文地址:https://www.cnblogs.com/jxd283465/p/12015661.html

时间: 2024-08-30 16:39:25

【Java】使用@Valid+BindingResult进行controller参数校验的相关文章

接口参数校验之@Valid与BindingResult

接口方法往往需要对入参做一些校验,从而判断入参是否合格,而javax.validation包为我们提供了一些常用的参数校验注解,使用起来很方便. 下面这个示例是检验入参对象中的password是否为空 1. 创建一个User.java import javax.validation.constraints.NotBlank; public class User { private String username; @NotBlank private String password; privat

Spring MVC 参数校验

转自:http://blog.csdn.net/eson_15/article/details/51725470 这一篇博文主要总结一下springmvc中对数据的校验.在实际中,通常使用较多是前端的校验,比如页面中js校验,对于安全要求较高的建议在服务端也要进行校验.服务端校验可以是在控制层conroller,也可以是在业务层service,controller校验页面请求的参数的合法性,在服务端控制层conroller的校验,不区分客户端类型(浏览器.手机客户端.远程调用):service层

SpringBoot 参数校验的方法

Introduction 有参数传递的地方都少不了参数校验.在web开发中,前端的参数校验是为了用户体验,后端的参数校验是为了安全.试想一下,如果在controller层中没有经过任何校验的参数通过service层.dao层一路来到了数据库就可能导致严重的后果,最好的结果是查不出数据,严重一点就是报错,如果这些没有被校验的参数中包含了恶意代码,那就可能导致更严重的后果. 这里我们主要介绍在springboot中的几种参数校验方式.常用的用于参数校验的注解如下: @AssertFalse 所注解的

springmvc参数校验+统一异常处理

一.PathVariable 校验 在定义 Restful 风格的接口时,通常会采用 PathVariable 指定关键业务参数,如下: @GetMapping("/path/{group:[a-zA-Z0-9_]+}/{userid}") @ResponseBody public String path(@PathVariable("group") String group, @PathVariable("userid") Integer us

jsr-303 参数校验-学习(转)

1.是什么? JSR303 是一套 JavaBean 参数校验的标准,它定义了很多常用的校验注解,比如: ------------------------------------------------- @NotNull(message="名字不能为空") private String userName; @Max(value=90,message="年龄不能超过90岁") private int age; @Email(message="邮箱格式错误&

spring注解式参数校验

很痛苦遇到大量的参数进行校验,在业务中还要抛出异常或者返回异常时的校验信息,在代码中相当冗长,今天我们就来学习spring注解式参数校验. 其实就是:hibernate的validator. 开始啦...... 1.controller的bean加上@Validated就像这样 1 @ApiOperation(value = "用户登录接口", notes = "用户登录") 2 @PostMapping("/userLogin") 3 publ

实用———springmvc接收参数校验

https://www.cnblogs.com/funyoung/p/8670550.html https://www.cnblogs.com/monkeydai/p/10068547.html [email protected] 两粒种子,一片森林. 首页 新随笔 联系 订阅 管理 随笔 - 21  文章 - 0  评论 - 8 两粒种子,一片森林. 首页 新随笔 联系 订阅 管理 随笔 - 21  文章 - 0  评论 - 8 SpringMVC参数校验 使用SpringMVC时配合hibe

API安全(五)-参数校验

1.为什么要做数据校验 要保证系统的安全性,健壮性,数据校验必不可少,校验参数的合法性,不能因为前端或者其它调用段因为参数传的不对导致我们的系统报错. 2.开发中参数校验做在哪里 一般都是做在接口层面,对传入的参数进行校验. 3.Bean Validation 对于Controller接口的参数校验,如果参数较少可以自己写代码进行校,但是如果参数较多,就会由一堆if-else,代码不美观.我们可以使用Bean Validation来进行参数校验,Bean Validation是一种Java规范,

为List&lt;T&gt;中的T进行参数校验

1.现在前端发送了一个POST请求,他的Data是一个数组,而不是对象(jsonObj的值两侧是中括号). var jsonObj = [{'id':11, 'name':'叵'}, {'id':12, 'name':'卜'}]; $.ajax({ type : "post", // 省略 data : JSON.stringify(jsonObj), // 省略 }); 2.后端的请求方法应该让一个Input的数组对象,或是Input泛型的List对象入参,来进行数据绑定 @Requ