【JAVA】Spring Boot项目开发中实现数据的校验

一、前言

我们在项目开发的过程中往往会有数据校验的要求,比如需要用户提交数据非空不重复等等。

二、实现方式

首先在pom文件中加入依赖

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

在实体类要校验的属性上加上相关注解

public class Type {
	//message属性可以被前端拿到
    @NotBlank(message = "名称不能为空")
    private String name;
}



空检查
@Null       验证对象是否为null
@NotNull    验证对象是否不为null, 无法查检长度为0的字符串
@NotBlank   检查约束字符串是不是Null还有被Trim的长度是否大于0,只对字符串,且会去掉前后空格.
@NotEmpty   检查约束元素是否为NULL或者是EMPTY.
    
Booelan检查
@AssertTrue     验证 Boolean 对象是否为 true  
@AssertFalse    验证 Boolean 对象是否为 false  
    
长度检查
@Size(min=, max=) 验证对象(Array,Collection,Map,String)长度是否在给定的范围之内  
@Length(min=, max=) string is between min and max included.

日期检查
@Past       验证 DateCalendar 对象是否在当前时间之前  
@Future     验证 DateCalendar 对象是否在当前时间之后  
@Pattern    验证 String 对象是否符合正则表达式的规则

Controller中在要验证的参数前面加上@Valid,可以再加一个BindingResult类型的参数来接收校验之后的结果

    @PostMapping("/types/{id}")
    public String editPost(@Valid Type type, BindingResult result,@PathVariable Long id, RedirectAttributes attributes){
        Type type1 = typeService.getTypeByName(type.getName());
        if(type1 != null){
        	//自定义验证结果(验证属性的名字与实体类名字要相同,自定义结果类型,自定义提示)
            result.rejectValue("name","nameError","不能添加重复分类");
        }
        if(result.hasErrors()) {
            return "admin/types-input";
        }
        Type t = typeService.updateType(id,type);
        if(t == null) {
            attributes.addFlashAttribute("message","更新失败");
        } else {
            attributes.addFlashAttribute("message","更新成功");
        }
        return "redirect:/admin/types";
    }

因为是最后是一个重定向的操作,无法携带 request 中的数据,为了传递 message 数据,加入了一个 RedirectAttributes 类型的参数。参数中的 addFlashAttributie(“param”, value) 方法与 addAttributie("prama",value) 方法不同点在于,后者相当于在重定向链接地址追加传递的参数,直接将传递的参数暴露在链接地址上,非常的不安全前者是隐藏了参数,链接地址上不直接暴露,但是能且只能在重定向的 “页面” 获取prama参数值。其原理就是放到session中,session在跳到页面后马上移除对象。如果是重定向一个controller中是获取不到该prama属性值的。除非在controller中用(@RequestPrama(value = “prama”)String prama)注解,采用传参的方式。

三、最后是前端校验结果的代码

<div th:if="${#fields.hasErrors('name')}">
	<h1>验证失败</h1>
	<p th:errors="*{name}">提交信息不符合规则</p>
</div>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值