0
点赞
收藏
分享

微信扫一扫

引入 Spring 中的 @valid 注解,解决录入数据验证

惠特曼 2022-03-30 阅读 25
spring boot

我们引出 Spring 中的 @valid 注解,解决录入数据验证,具体如下:

首先,我们在 Maven 配置中引入 @valid 的依赖:

如果你是 springboot 项目,那么可以不用引入了,已经引入了,他就存在于最核心的 web 开发包里面。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>2.0.5.RELEASE</version>
</dependency>
如果你不是 springboot 项目,那么引入下面依赖即可:

<dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
    <version>1.1.0.Final</version>
</dependency>
 
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>5.4.1.Final</version>
</dependency>
那么针对上面情景,我们可以对我们的代码进行优化了。

首先我们在 Employee 类的属性上打上如下注解:

package com.zyq.beans;
 
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
 
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.Range;
 
/**
 * 员工对象
 * 
 * @author sunnyzyq
 * @since 2019/12/13
 */
public class Employee {
 
    /** 姓名 */
    @NotBlank(message = "请输入名称")
    @Length(message = "名称不能超过个 {max} 字符", max = 10)
    public String name;
 
    /** 年龄 */
    @NotNull(message = "请输入年龄")
    @Range(message = "年龄范围为 {min} 到 {max} 之间", min = 1, max = 100)
    public Integer age;
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public Integer getAge() {
        return age;
    }
 
    public void setAge(Integer age) {
        this.age = age;
    }
 
}


然后再 Controller 对应方法上,对这个员工标上 @Valid 注解,表示我们对这个对象属性需要进行验证,

@PostMapping
@PreAuthorize("hasRole('USER')")
public String createPoll(@Valid @RequestBody PollRequest pollRequest,) {
    return "新增成功"
}

既然验证,那么就肯定会有验证结果,所以我们需要用一个东西来存放验证结果,做法也很简单,在参数直接添加一个BindingResult,具体如下:

@PostMapping
@PreAuthorize("hasRole('USER')")
public String createPoll(@Valid @RequestBody PollRequest pollRequest,) {
    if(bindingResult.hasErrors()) {
       return bindingResult.getAllErrors().get(0).getDefaultMessage();
    }
    return "新增成功"
}

除了刚刚都注解,最后再附加2个常用注解,我就直接贴图了,基本上这6个注解可以解决99%的字段,其他注解我就不贴图了,如果不满足,自己问百度。

 

举报

相关推荐

0 条评论