第十二篇 SpringBoot 2 x数据校验

1,011 阅读2分钟

#介绍 在项目的过程中,对于参数的校验是必须的,如果参数比较少的话我们可以直接通过代码进行校验,但是数据较大时再用这个方法就比较笨重了,接下来就该我们的主角Validation闪亮登场了 ####pom.xml

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

		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<optional>true</optional>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

实际上在这里数据校验都是调用的javax.validationspring-boot-starter-web中也包含了hibernate-validator,有兴趣的可以去翻翻文档

User.java

package com.priv.gabriel.entity;

import lombok.Data;
import org.hibernate.validator.constraints.Length;

import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;


/**
 * Created with Intellij IDEA.
 *
 * @Author: Gabriel
 * @Date: 2018-10-23
 * @Description:
 */
@Data
public class User {

	@NotBlank(message = "name不允许为空")
	@Length(min = 2,max = 10,message = "你的长度不对劲呀")
	private String name;
	@NotNull(message = "进入未成年人入内!")
	@Min(18)
	private int age;
	@NotBlank(message = "拒绝黑户")
	private String address;

}

接下来只需要在Controller层中使用@valid进行校验就可以了

package com.priv.gabriel.controller;

import com.priv.gabriel.entity.User;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.validation.Valid;

/**
 * Created with Intellij IDEA.
 *
 * @Author: Gabriel
 * @Date: 2018-10-23
 * @Description:
 */
@RestController
@RequestMapping("/user")
public class UserController {

	@RequestMapping("/check")
	public String check(@Valid User user){
		return "检测完毕!没有问题";
	}
}

Rest Client工具简单检测一下

image.png
结果当然是...

{
	"timestamp": "2018-10-23T09:01:45.159+0000",
	"status": 400,
	"error": "Bad Request",
	"errors": [{
		"codes": ["Length.user.name", "Length.name", "Length.java.lang.String", "Length"],
		"arguments": [{
			"codes": ["user.name", "name"],
			"arguments": null,
			"defaultMessage": "name",
			"code": "name"
		}, 10, 2],
		"defaultMessage": "你的长度不对劲呀",
		"objectName": "user",
		"field": "name",
		"rejectedValue": "",
		"bindingFailure": false,
		"code": "Length"
	}, {
		"codes": ["Min.user.age", "Min.age", "Min.int", "Min"],
		"arguments": [{
			"codes": ["user.age", "age"],
			"arguments": null,
			"defaultMessage": "age",
			"code": "age"
		}, 18],
		"defaultMessage": "最小不能小于18",
		"objectName": "user",
		"field": "age",
		"rejectedValue": 17,
		"bindingFailure": false,
		"code": "Min"
	}, {
		"codes": ["NotBlank.user.address", "NotBlank.address", "NotBlank.java.lang.String", "NotBlank"],
		"arguments": [{
			"codes": ["user.address", "address"],
			"arguments": null,
			"defaultMessage": "address",
			"code": "address"
		}],
		"defaultMessage": "拒绝黑户",
		"objectName": "user",
		"field": "address",
		"rejectedValue": "",
		"bindingFailure": false,
		"code": "NotBlank"
	}, {
		"codes": ["NotBlank.user.name", "NotBlank.name", "NotBlank.java.lang.String", "NotBlank"],
		"arguments": [{
			"codes": ["user.name", "name"],
			"arguments": null,
			"defaultMessage": "name",
			"code": "name"
		}],
		"defaultMessage": "name不允许为空",
		"objectName": "user",
		"field": "name",
		"rejectedValue": "",
		"bindingFailure": false,
		"code": "NotBlank"
	}],
	"message": "Validation failed for object='user'. Error count: 4",
	"path": "/user/check"
}

好了,到这里可以看到我们的设置已经生效了,关于数据校验你get到了吗? 项目下载地址