编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

Springboot中如何进行字段校验(spring boot 校验字段长度)

wxchong 2024-07-22 22:41:43 开源技术 42 ℃ 0 评论

一般情况下,我们后端进行字段一些校验有可能用到很多if-else语句,那么我们在springboot中该如何优雅的校验字段呢。现在登录我们的主角spring-boot-starter-validation

不想看文字的也可以直接查看视频 点击 springboot字段校验视频

首先我们新建一个springboot项目,打开idea


next


选择java version为8,然后点击下一步


点击next



创建完成后我们的项目目录结构。

pom.xml文件引入的依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.6</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.toutiao</groupId>
    <artifactId>valid-test</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>valid-test</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

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

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>


我们创建一个FormData类

package com.toutiao.validtest.entity;


import org.hibernate.validator.constraints.Length;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Pattern;

public class FormData {
    //唯一标识符为空
    @NotBlank(message = "用户id不能为空")
    private String uid;

    //用户名称只能是字母和数字
    @Pattern(regexp = "^[a-z0-9]+#34;, message = "用户名称只能是小写字母或数字")
    @Length(max = 12, message = "用户名称长度最大只能为12")
    private String username;

    //数据集名称只能是字母和数字
    @Pattern(regexp = "^[A-Za-z0-9]+#34;, message = "密码只能是字母或数字")
    //文件名称过长
    @Length(max = 12, message = "密码不能大于12")
    //文件名称为空
    @NotBlank(message = "密码不能为空")
    private String password;

    //数据集描述最多为256字节
    @Length(max = 256, message = "介绍最大只能为256位")
    //数据集描述为空
    @NotBlank(message = "介绍不能为空")
    private String intro;

    public String getUid() {
        return uid;
    }

    public void setUid(String uid) {
        this.uid = uid;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getIntro() {
        return intro;
    }

    public void setIntro(String intro) {
        this.intro = intro;
    }
}

我们创建一个测试controller

TestController

package com.toutiao.validtest.controller;


import com.toutiao.validtest.entity.FormData;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author joy
 * @email 413735709@qq.com
 * @date 2021/11/7 9:04 下午
 */
@Controller
@RequestMapping("test")
public class TestController {

    @PostMapping(value = "/checkData")
    @ResponseBody
    public Object checkData(@RequestBody @Valid FormData formData, BindingResult result){
        // 如果校验不通过,输出错误信息
        if (result.hasErrors()) {
            List<FieldError> fieldErrors = result.getFieldErrors();
            Map<String, Object> map = new HashMap<>();
            for (FieldError fieldError : fieldErrors) {
                String field = fieldError.getField();
                String defaultMessage = fieldError.getDefaultMessage();
                map.put(field, defaultMessage);
            }
            return map;
        }

        return "ok";
    }
}

我们打开postman进行测试,我们在什么都不输入的情况下,点击send


我们输入用户id


输入密码


这样就简单的实现了,我们用@Valid注解校验字段。

springboot的常用校验字段注解说明

注解

说明

@Length(min=1,max=10)

检查所属的字段的长度是否在min和max之间,只能用户字符串

@Range(min=,max=,message=)

必须在合适的范围内

@Max

该字段的值只能小于或等于该值

@Min

该字段的值只能大于或等于该值

@NotNull

不能为null

@NotBlank

不能为空,检查时会将空格忽略

@NotEmpty

不能为空,这里的空是指空字符串

@Pattern(regex=)

必须符合指定的正则表达式



Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表