validator入门

validator中文文档地址和英文地址

https://docs.jboss.org/hibernate/validator/4.2/reference/zh-CN/html/validator-gettingstarted.html
https://docs.jboss.org/hibernate/validator/6.0/reference/en-US/html_single/#preface

自定义hibernate-validator校验

工具类ValidatorUtils

/*** hibernate-validator校验工具类* 参考文档:http://docs.jboss.org/hibernate/validator/6.0/reference/en-US/html_single/** @author Mark sunlightcs@gmail.com* @since 1.0.0*/
public class ValidatorUtils {private static ResourceBundleMessageSource getMessageSource() {ResourceBundleMessageSource bundleMessageSource = new ResourceBundleMessageSource();bundleMessageSource.setDefaultEncoding("UTF-8");bundleMessageSource.setBasenames("i18n/validation", "i18n/validation_common");return bundleMessageSource;}/*** 校验对象* @param object        待校验对象* @param groups        待校验的组* @throws RenException  校验不通过,则报RenException异常*/public static void validateEntity(Object object, Class<?>... groups)throws RenException {Locale.setDefault(LocaleContextHolder.getLocale());Validator validator = Validation.byDefaultProvider().configure().messageInterpolator(new ResourceBundleMessageInterpolator(new MessageSourceResourceBundleLocator(getMessageSource()))).buildValidatorFactory().getValidator();Set<ConstraintViolation<Object>> constraintViolations = validator.validate(object, groups);if (!constraintViolations.isEmpty()) {ConstraintViolation<Object> constraint = constraintViolations.iterator().next();throw new RenException(constraint.getMessage());}}
}
// 自定义资源绑定指定的properties文件
ResourceBundleMessageSource bundleMessageSource = new ResourceBundleMessageSource();bundleMessageSource.setDefaultEncoding("UTF-8");bundleMessageSource.setBasenames("i18n/validation", "i18n/validation_common");

在这里插入图片描述

添加约束

/*** 用户管理*/
@Data
@ApiModel(value = "用户管理")
public class SysUserDTO implements Serializable {private static final long serialVersionUID = 1L;@ApiModelProperty(value = "id")@Null(message="{id.null}", groups = AddGroup.class)@NotNull(message="{id.require}", groups = UpdateGroup.class)private Long id;@ApiModelProperty(value = "用户名", required = true)@NotBlank(message="{sysuser.username.require}", groups = DefaultGroup.class)private String username;@ApiModelProperty(value = "密码")@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)@NotBlank(message="{sysuser.password.require}", groups = AddGroup.class)private String password;@ApiModelProperty(value = "姓名", required = true)@NotBlank(message="{sysuser.realname.require}", groups = DefaultGroup.class)private String realName;@ApiModelProperty(value = "头像")private String headUrl;@ApiModelProperty(value = "性别   0:男   1:女    2:保密", required = true)@Range(min=0, max=2, message = "{sysuser.gender.range}", groups = DefaultGroup.class)private Integer gender;@ApiModelProperty(value = "邮箱", required = true)@NotBlank(message="{sysuser.email.require}", groups = DefaultGroup.class)@Email(message="{sysuser.email.error}", groups = DefaultGroup.class)private String email;@ApiModelProperty(value = "手机号", required = true)@NotBlank(message="{sysuser.mobile.require}", groups = DefaultGroup.class)private String mobile;@ApiModelProperty(value = "部门ID", required = true)@NotNull(message="{sysuser.deptId.require}", groups = DefaultGroup.class)private Long deptId;@ApiModelProperty(value = "超级管理员   0:否   1:是")@Range(min=0, max=1, message = "{sysuser.superadmin.range}", groups = DefaultGroup.class)private Integer superAdmin;@ApiModelProperty(value = "状态  0:停用    1:正常", required = true)@Range(min=0, max=1, message = "{sysuser.status.range}", groups = DefaultGroup.class)private Integer status;@ApiModelProperty(value = "备注")private String remark;@ApiModelProperty(value = "创建时间")@JsonProperty(access = JsonProperty.Access.READ_ONLY)@JsonFormat(pattern = DateUtils.DATE_TIME_PATTERN)private Date createDate;@ApiModelProperty(value = "角色ID列表")private List<Long> roleIdList;@ApiModelProperty(value = "岗位ID列表")private List<Long> postIdList;@ApiModelProperty(value = "部门名称")private String deptName;}

校验约束

ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
validator = factory.getValidator();Car car = new Car(null, "DD-AB-123", 4);Set<ConstraintViolation<Object>> constraintViolations = validator.validate(car);
// validator.validate(car, DefaultGroup.class);if (!constraintViolations.isEmpty()) {ConstraintViolation<Object> constraint = constraintViolations.iterator().next();throw new RenException(constraint.getMessage());
}
// validate()方法会返回一个set的ConstraintViolation的实例的集合, 我们可以通过遍历它来查看有哪些验证错误, 如果一个对象没有校验出问题的话,那么validate() 会返回一个空的set对象
assertEquals(1, constraintViolations.size());
assertEquals("may not be null", constraintViolations.iterator().next().getMessage());

在这里插入图片描述

Controller使用

新增和修改都需要校验对象数据使用 ValidatorUtils.validateEntity校验工具,如果是校验单个值使用AssertUtils.isArrayEmpty断言工具

@RestController
@RequestMapping("post")
@Api(tags="岗位管理")
public class SysPostController {@Autowiredprivate SysPostService sysPostService;@PostMapping@ApiOperation("保存")@LogOperation("保存")@PreAuthorize("hasAuthority('sys:post:save')")public Result save(@RequestBody SysPostDTO dto){//效验数据ValidatorUtils.validateEntity(dto, AddGroup.class, DefaultGroup.class);sysPostService.save(dto);return new Result();}
}@PutMapping@ApiOperation("修改")@LogOperation("修改")@PreAuthorize("hasAuthority('sys:post:update')")public Result update(@RequestBody SysPostDTO dto){//效验数据ValidatorUtils.validateEntity(dto, UpdateGroup.class, DefaultGroup.class);sysPostService.update(dto);return new Result();}@DeleteMapping@ApiOperation("删除")@LogOperation("删除")@PreAuthorize("hasAuthority('sys:post:delete')")public Result delete(@RequestBody Long[] ids){//效验数据AssertUtils.isArrayEmpty(ids, "id");sysPostService.delete(ids);return new Result();}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/60439.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电视盒子哪个好?文宇数码盘点口碑网络电视盒子排行榜

大家好&#xff0c;欢迎来到文宇数码频道。本期我们要分享的数码产品是电视盒子&#xff0c;电视盒子可以说是家家必备&#xff0c;很多用户在买电视盒子时踩过雷&#xff0c;因此本期我们的主题是电视盒子哪个好&#xff0c;为了结果更客观公正&#xff0c;我们购入了十多款热…

希尔排序——C语言andPython

前言 步骤 代码 C语言 Python 总结 前言 希尔排序&#xff08;Shell Sort&#xff09;是一种改进的插入排序算法&#xff0c;它通过将数组分成多个子序列进行排序&#xff0c;逐步减小子序列的长度&#xff0c;最终完成整个数组的排序。希尔排序的核心思想是通过排序较远距…

爬虫学习记录(持续更新)

一、问题记录 1.使用webdriver报错AttributeError: str object has no attribute capabilities 解决&#xff1a;目前使用的selenium版本是4.11.2&#xff0c;可以不必设置driver.exe的路径&#xff0c;selenium可以自己处理浏览器和驱动程序&#xff0c;因此&#xff0c;使用…

Delphi7通过VB6之COM对象调用PowerBASIC写的DLL功能

Delphi7通过VB6之COM对象调用PowerBASIC写的DLL功能。标题挺长&#xff0c;其实目标很简单&#xff0c;就是在Delphi7中使用PowerBASIC的MKI/CVI, MKS/CVS, MKD/CVD&#xff0c;并顺便加入CRC16检验函数&#xff0c;再进行16进制高低字节调整&#xff0c;方便在VB6、Delphi、La…

Linux配置QT Creator环境:ubuntu中安装QT Creator环境

一、前景 目前市面上很多公司使用QT Creator进行界面开发&#xff0c;基本都会选择在Linux环境进行&#xff0c;优点不仅是市场所需&#xff0c;更是方便后期代码的移植&#xff0c;相较于Windows系统&#xff0c;Linux系统移植性非常好。故此篇文章&#xff0c;介绍如何在Linu…

【EI/SCOPUS检索】第三届新媒体发展与现代化教育国际学术会议(NMDME 2023)

第三届新媒体发展与现代化教育国际学术会议&#xff08;NMDME 2023&#xff09; The 3rd International Conference on New Media Development and Modernized Education 第三届新媒体发展与现代化教育国际学术会议(NMDME 2023)将于2023年10月13-15日于西安召开。会议旨在为新…

FPGA_时钟显示(时钟可调)

1. 实验说明 在数码管显示数据的基础上&#xff0c;让六位数码管显示数字时钟&#xff0c;并且通过按键可以对时间进行修改。 实验目标&#xff1a;六位数码管分别显示时间的时分秒&#xff0c;且通过按键可实现加减调整时间及清零功能。 key1: 切换键&#xff1a;选择待…

lancet: 【推荐】--源码学习

一个全面、高效、可复用的go语言工具函数库&#xff1b; 可以学习源码的好的地方&#xff0c;这个是个工具库&#xff0c;建议最好的办法是 在项目中导入后&#xff0c;然后查看他的各个源代码进行学习使用 golangd中&#xff0c;查看导入包以及他的源代码&#xff1b; 中文…

Telerik UI for ASP.NET Core Crack

Telerik UI for ASP.NET Core Crack Telerik ASP.NET Core还包括MVC和Kendo UI捆绑包(用于JavaScript)、Figma的设计工具包以及文档处理库、用于ASP.NET Core的Telerik REPL、RTL支持、辅助功能和键盘导航、主题化、虚拟课堂培训、详细文档、演示、KBs和世界级支持。使用一整套…

接口幂等性实现方式

优质博文&#xff1a;IT-BLOG-CN 幂等 操作的特点是一次和多次请求某一个资源对于资源本身应该具有同样的结果&#xff08;网络超时等问题除外&#xff09;。幂等函数或幂等方法是指可以使用相同参数重复执行&#xff0c;并能获得相同结果的函数。这些函数不会影响系统状态&am…

【云原生】Docker 详解(一):从虚拟机到容器

Docker 详解&#xff08;一&#xff09;&#xff1a;从虚拟机到容器 1.虚拟化 要解释清楚 Docker&#xff0c;首先要解释清楚 容器&#xff08;Container&#xff09;的概念。要解释容器的话&#xff0c;就需要从操作系统说起。操作系统太底层&#xff0c;细说的话一两本书都说…

科技引领,教育革新|EasyV助力数字孪生智慧教育建设!

数字孪生校园是以物联网、大数据、云计算、人工智能、三维可视化等新型数字化技术为基础&#xff0c;构建的数智校园的“大脑”。对校园的人、车、资产设施、各业务系统进行全联接&#xff0c;实现数据全融合、状态全可视、业务全可管、事件全可控&#xff0c;使校园更安全、更…