@ParamsValidate 一 入门

@ParamsValidate系列教程 https://blog.csdn.net/u010606397/article/category/7689866

web后端校验请求参数是一个很常用的功能,java web普遍使用spring validation来校验。我自己也写了一个校验请求参数的库params-validate,跟spring validation相比还是有些小优点的,比如:

1、不需要改动pojo类。

2、使用map接收参数时,也可以校验参数。

新建一个controller方法:

public Object demo1(@RequestBody User user){}
//User类
public class User {
    private String id;
    private String name;
    private String birthday;
    private Boolean single;
    private Float salaryNum;
    private BigDecimal bigNum;

    限于篇幅,省略一大堆get、set方法
}

对前端传参有如下要求:

name: 只能是字母、数字、_,必填,最小长度10,最大长度100
birthday:必填
single: 只能是Boolean型
salaryNum:只能是正数,必填,最小值100,最大值1000
bigNum: 只能是正数或0


用params-validate可实现这个校验功能。

1、导入依赖

<dependency>
	<groupId>com.github.codingsoldier</groupId>
	<artifactId>params-validate</artifactId>
	<version>1.8-RELEASE</version>
	<!--版本不能低于1.8,最新版本请查看:
	https://mvnrepository.com/artifact/com.github.codingsoldier/params-validate -->
	<exclusions>
		<!--排除重复的依赖-->
		<exclusion>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
		</exclusion>
	</exclusions>
</dependency>

2、新建ValidateInterfaceAdapter子类。ValidateInterfaceAdapter是一个虚拟类,必须新建可实例化的子类,且注入到IOC容器中。

@Component
public class ValidateInterfaceImpl extends ValidateInterfaceAdapter{

}

3、在resources目录下新建文件夹validate(文件夹名称必须是validate),在validate下新建一个json文件learn-params-validate.json(json文件名可随意写),如下图红色箭头所示。

learn-params-validate.json中填写如下内容:

{
  "userValidate": {
    "name": {
      "request": true,
      "minLength": 10,
      "maxLength": 100,
      "regex": "^[a-zA-Z0-9_]+$",
      "message": "名字必须是字母、数字、_"
    },
    "birthday": {
      "request": true
    },
    "single": {
      "regex": "^(true)$|^(false)$",
      "message": "single必须是true、false"
    },
    "salaryNum": {
      "request": "true",
      "minValue": 100,
      "maxValue": 1000,
      "regex": "^(\\+)?\\d+(\\.\\d+)?$",
      "message": "薪水必须是正数"
    },
    "bigNum": {
      "regex": "^(\\+)?\\d+(\\.\\d+)?$",
      "message": "bigNum必须正数或0"
    }
  }
}

4、新建controller

@RestController
@RequestMapping("/learn")
public class LearnParamsValidate {

    @PostMapping("/demo1")
    /**
     * 添加校验注解@ParamsValidate
     * file的值是第三步的json文件learn-params-validate.json
     * key的值是learn-params-validate.json中的userValidate
     */
    @ParamsValidate(file = "/learn-params-validate.json", key = "userValidate")
    public Object demo1(@RequestBody User user){
        System.out.println("demo1方法执行");
        Map<String, Object> map1 = new HashMap<>();
        map1.put("code", 0);
        map1.put("data", "成功");
        return map1;
    }
}

使用postman发送一个请求,如下图:

还记得对前端传参的要求吗?要求如下:

name: 只能是字母、数字、_,必填,最小长度10,最大长度100
birthday:必填
single: 只能是Boolean型
salaryNum:只能是正数,必填,最小值100,最大值1000
bigNum: 只能是正数或0

前端传参只有single符合要求,其他参数都不符合。通过编辑器的控制台和postman请求结果可以看出controller.demo1()方法没有执行。原因是此请求会被@ParamsValidate拦截,前端传参不符合要求,不执行controller方法,返回参数校验信息给前端。

下面把参数改正确,再发一次请求,通过下图、编辑器的控制台可以看到controller.demo1()方法执行了。

至此,一个简单的params-validate使用方法就介绍完了。

下面我细说下json文件校验规则

1、在validate目录下新建一个json文件。用一个key框住所有请求参数的key。

用userValidate框住所有请求参数的key
"userValidate": {
    "name": {
        ...
    },
    "birthday": {
        ...
    },
    ...
}

2、对需要校验的请求参数编写校验规则。

    "request":       true表示必填,false表示可为空,不写request表示可为空
    "minValue":      最小值
    "maxValue":      最大值
    "minLength":     最小长度
    "maxLength":     最大长度
    "regex":             正则表达式
    "message":       参数未通过校验,返回提示信息

最后,在controller方法上添加注解@ParamsValidate(file="json文件名", key="userValidate")就可以对参数进行校验了。

教程代码  https://github.com/CodingSoldier/test-params-validate

params-validate项目地址   github   码云  

发布了51 篇原创文章 · 获赞 14 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/u010606397/article/details/86561498