数据校验规则

       数据校验是开发过程中一个常见的环节,一般来说,为了提高系统运行效率,都会在前端进行数据校验,但是这并不意味着不必在后端做数据校验了,因为用户还是可能在获取数据接口后手动传入非法数据,所以后端还是需要做数据校验。 Spring Boot 对此也提供了相 的自动化配置解决方案。

1、普通校验

1.1 引入相关依赖包

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

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

1.2 resource目录下创建配置文件ValidationMessages.properties

user.name.size=用户名的长度在5到10个字符之间
user.address.notnull=用户地址不能为空
user.age.size=年龄输入不正确
user.email.notnull=邮箱不能为空
user.email.pattern=不正确的电子邮件格式

1.3 创建需要校验的实体类

import javax.validation.constraints.*;

public class User {

    private Integer id;

    @Size(min = 5, max= 10 , message = "{user.name.size}")
    private String name ;

    @NotNull(message ="{user.address.notnull}")
    private String address ;

    @DecimalMin(value = "1", message ="{user.age.size}")
    @DecimalMax(value = "200", message ="{user.age.size}")
    private Integer age ;

    @Email(message ="{user.email.pattern}")
    @NotNull(message ="{user.email.notnull}")
    private String email ;
	//省略get/set方法
}

代码解释:

  • @Size 示一个字符串的长度或者一个集合的大小,必须在某一个范围中; min 参数表示范围的下限; max参数表示范围的上限; message 表示校验失败时的提示信息。
  • @NotNull 注解表示该字段不能为空。
  • @DecimalMin 注解表示对应属性值的下限,@DecimalMax 注解表示对应属性值的上限
  • @Email 注解表示对应属性格式是一个 Email

1.4 创建 UserController

@RestController
public class UserController {

    @PostMapping("/user")
    public List<String> addUser(@RequestBody @Validated User user, BindingResult result) {
        List<String> errors = new ArrayList<>();
        if (result.hasErrors()) {
            List<ObjectError> allErrors = result.getAllErrors();
            for (ObjectError error : allErrors) {
                errors.add(error.getDefaultMessage());
            }
        }
        return errors;
    }
}

在这里插入图片描述

2、分组校验

有的时候开发者在某一个实体类中定义了很多校验规 ,但是在某一次业务处理中,并不需要这么多校验规,次时就可以使用分组校验。

2.1 分别创建两个分组接口

public interface ValidationAddGroup {
}
public interface ValidationUpdateGroup {
}

2.2 需要校验的实体类

public class User {

    private Integer id;

    @Size(min = 5, max= 10 , message = "{user.name.size}", groups = ValidationAddGroup.class)
    private String name ;

    @NotNull(message ="{user.address.notnull}",groups = ValidationUpdateGroup.class)
    private String address ;

    @DecimalMin(value = "1", message ="{user.age.size}")
    @DecimalMax(value = "200", message ="{user.age.size}")
    private Integer age ;

    @Email(message ="{user.email.pattern}")
    @NotNull(message ="{user.email.notnull}",groups = ValidationUpdateGroup.class)
    private String email ;
}

controller

@PostMapping("/user1")
public List<String> addUser1(@RequestBody @Validated(ValidationAddGroup.class) User user, BindingResult result) {
    List<String> errors = new ArrayList<>();
    if (result.hasErrors()) {
        List<ObjectError> allErrors = result.getAllErrors();
        for (ObjectError error : allErrors) {
            errors.add(error.getDefaultMessage());
        }
    }
    return errors;
}

在这里插入图片描述

3、校验注解

在这里插入图片描述
在这里插入图片描述

校验时返回的提示乱码解决办法如下:

在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值