java web 校验器validator添加child tags_Hibernate validator使用以及自定义校验器注解

jsr-303 是 java ee 6 中的一项子规范,叫做 bean validation,用于对 java bean 中的字段的值进行验证。hibernate validator则是hibdernate提供的一种对该规范的实现。

——即hibernate validator是用来做参数校验。

使用hibernate validator提供的注解进行参数校验

注解

释义

@null

必须为null

@notnull

不能为null

@asserttrue

必须为true

@assertfalse

必须为false

@min

必须为数字,其值大于或等于指定的最小值

@max

必须为数字,其值小于或等于指定的最大值

@decimalmin

必须为数字,其值大于或等于指定的最小值

@decimalmax

必须为数字,其值小于或等于指定的最大值

@size

集合的长度

@digits

必须为数字,其值必须再可接受的范围内

@past

必须是过去的日期

@future

必须是将来的日期

@pattern

必须符合正则表达式

@email

必须是邮箱格式

@length

长度范围

@notempty

不能为null,长度大于0

@range

元素的大小范围

@notblank

不能为null,字符串长度大于0(限字符串)

引入依赖

org.hibernate

hibernate-validator

6.0.15.final

hibernate validator常用注解

创建测试类

注意必须先进行为null判断,否则其他注解有的不会生效。

比如username加了@length而不加@notnull注解,当没有输入username,那么@length判断将不会生效,判断为null的有@notnull、@notempty以及@notblank

建议自行去掉@notnull再测试一下

package com.dfyang.validator.entity;

import org.hibernate.validator.constraints.length;

import org.hibernate.validator.constraints.range;

import javax.validation.constraints.notblank;

public class user {

@notblank(message = "名称不能为空")

private string name;

@range(min = 1, max = 120, message = "年龄必须为1-120岁")

private integer age;

@notblank(message = "描述不能为空")

private string description;

@notnull

@length(min = 6, max = 18, message = "用户名长度必须为6-18位")

private string username;

@notnull

@length(min = 6, max = 18, message = "密码长度必须为6-18位")

private string password;

/** get、set方法 */

}

创建测试controller

@valid用在参数上,表示对该参数进行校验。

如果对参数校验发现有误,会将错误注入到bindingresult中

我们这里将错误进行打印,也可以直接抛出异常

package com.dfyang.validator.controller;

import com.dfyang.validator.entity.user;

import org.springframework.validation.bindingresult;

import org.springframework.validation.objecterror;

import org.springframework.web.bind.annotation.getmapping;

import org.springframework.web.bind.annotation.responsebody;

import org.springframework.web.bind.annotation.restcontroller;

import javax.validation.valid;

@restcontroller

public class usercontroller {

@getmapping("/insert")

@responsebody

public user insertuser(@valid user user, bindingresult result) {

if (result.haserrors()) {

for (objecterror error : result.getallerrors()) {

system.err.println(error.getdefaultmessage());

}

}

return user;

}

}

输入 http://localhost:8080/insert?name=张三&descripyion=&age=0&username=123123

fab7d797ba6efbfb64fe3d00f3ad7ac3.png

使用自定义校验器进行参数校验

创建自定义注解,用于判断年龄是否符合约束

package com.dfyang.validator.constraint;

import javax.validation.constraint;

import javax.validation.payload;

import java.lang.annotation.elementtype;

import java.lang.annotation.retention;

import java.lang.annotation.retentionpolicy;

import java.lang.annotation.target;

/**

* 性别约束

*/

@target({ elementtype.field})

@retention(retentionpolicy.runtime)

@constraint(validatedby = sexconstraintvalidator.class)

public @interface sex {

string message() default "性别有误";

class>[] groups() default { };

class extends payload>[] payload() default { };

}

判断注解的值是否符合约束,这里进行了为null判断,也可以不进行在多加一个@nutnull

package com.dfyang.validator.constraint;

import javax.validation.constraintvalidator;

import javax.validation.constraintvalidatorcontext;

/**

* 性别约束逻辑判断

*/

public class sexconstraintvalidator implements constraintvalidator {

@override

public boolean isvalid(string value, constraintvalidatorcontext context) {

return value != null && (value.equals("男") || value.equals("女"));

}

}

@target用于指定使用范围,该处限定只能在字段上使用

@retention(retentionpolicy.runtime)表示注解在运行时可以通过反射获取到

@constraint(validatedby = xxx.class)指定该注解校验逻辑

2.创建校验实体,使用hibernate validator自带注解以及自定义的注解

package com.dfyang.validator.entity;

import com.dfyang.validator.constraint.sex;

import org.hibernate.validator.constraints.length;

import org.hibernate.validator.constraints.range;

import javax.validation.constraints.notblank;

import javax.validation.constraints.notnull;

public class user {

@notblank(message = "名称不能为空")

private string name;

@range(min = 1, max = 120, message = "年龄必须为1-120岁")

private integer age;

@sex

private string sex;

@notblank(message = "描述不能为空")

private string description;

@notnull(message = "用户名不能为空")

@length(min = 6, max = 18, message = "用户名长度必须为6-18位")

private string username;

@notnull(message = "密码不能为空")

@length(min = 6, max = 18, message = "密码长度必须为6-18位")

private string password;

/** 省略get、set */

}

5ad4f7f91b764a07c516cd4b19d326ec.png

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持萬仟网。

希望与广大网友互动??

点此进行留言吧!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值