谷粒商城-品牌管理-JSR303数据校验
后端在处理前端传过来的数据时,尽管前端表单已经加了校验逻辑,但是作为严谨考虑,在后端对接口传输的数据做校验也必不可少。
开启校验:
实体类上增加校验注解,接口参数前增加@Valid 开启校验
package com.xxh.product.entity;import javax.validation.constraints.*;
import org.hibernate.validator.constraints.URL;/*** 品牌** @author xxh*/
@Data
@TableName("pms_brand")
public class BrandEntity implements Serializable {private static final long serialVersionUID = 1L;/*** 品牌id*/@NotNull(message = "修改必须指定品牌id", groups = {UpdateGroup.class})@Null(message = "新增不能指定id", groups = {AddGroup.class})@TableIdprivate Long brandId;/*** 品牌名*/@NotBlank(message = "品牌名必须提交", groups = {AddGroup.class, UpdateGroup.class})private String name;/*** 品牌logo地址*/@NotBlank(groups = {AddGroup.class})@URL(message = "logo必须是一个合法的url地址", groups = {AddGroup.class, UpdateGroup.class})private String logo;/*** 介绍*/private String descript;/*** 显示状态[0-不显示;1-显示]*/
// @Pattern()@NotNull(groups = {AddGroup.class, UpdateStatusGroup.class})@ListValue(vals = {0, 1}, groups = {AddGroup.class, UpdateStatusGroup.class})private Integer showStatus;/*** 检索首字母*/@NotEmpty(groups = {AddGroup.class})@Pattern(regexp = "^[a-zA-Z]$", message = "检索首字母必须是一个字母", groups = {AddGroup.class, UpdateGroup.class})private String firstLetter;/*** 排序*/@NotNull(groups = {AddGroup.class})@Min(value = 0, message = "排序必须大于等于0", groups = {AddGroup.class, UpdateGroup.class})private Integer sort;
}
@RequestMapping("/save")
//@RequiresPermissions("product:brand:save")
public R save(@Validated({AddGroup.class}) @RequestBody BrandEntity brand/*,BindingResult result*/) {brandService.save(brand);return R.ok();
}
JSR303
1)、给Bean添加校验注解:javax.validation.constraints,并定义自己的message提示
2)、开启校验功能@Valid
效果:校验错误以后会有默认的响应;
3)、给校验的参数bean后紧跟一个BindingResult,就可以获取到校验的结果
4)、分组校验(多场景的复杂校验)
1)、 @NotBlank(message = "品牌名必须提交",groups = {AddGroup.class,UpdateGroup.class})
给校验注解标注什么情况需要进行校验
2)、@Validated({AddGroup.class})
3)、默认没有指定分组的校验注解@NotBlank,在分组校验情况@Validated({AddGroup.class})下不生效,只会在@Validated生效;
5)、自定义校验
1)、编写一个自定义的校验注解
2)、编写一个自定义的校验器 ConstraintValidator
3)、关联自定义的校验器和自定义的校验注解
自定义校验注解
/*** 自定义校验注解 声明可以取那些值* @author xxh*/
@Documented
@Constraint(validatedBy = {ListValueConstraintValidator.class})
@Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE})
@Retention(RUNTIME)
public @interface ListValue {String message() default "{com.xxh.common.valid.ListValue.message}";Class<?>[] groups() default {};Class<? extends Payload>[] payload() default {};int[] values() default {};
}
自定义校验器
package com.xxh.common.valid;/*** @author xxh*/
public class ListValueConstraintValidator implements ConstraintValidator<ListValue, Integer> {private final Set<Integer> set = new HashSet<>();/*** 初始化方法* 参数:自定义注解的详细信息*/@Overridepublic void initialize(ListValue constraintAnnotation) {int[] values = constraintAnnotation.values();for (int val : values) {set.add(val);}}/*** 判断是否校验成功** @param value 需要校验的值* @param context* @return*/@Overridepublic boolean isValid(Integer value, ConstraintValidatorContext context) {return set.contains(value);}
}
创建校验信息提示配置文件
在resource文件下创建:ValidationMessages.properties
com.xxh.common.valid.ListValue.message=必须提交指定的值
谷粒商城-品牌管理-JSR303数据校验相关推荐
- 品牌管理-JSR303数据校验
JSR303 1).给Bean添加校验注解:javax.validation.constraints,并定义自己的message提示 2).开启校验功能@Valid效果:校验错误以后会有默认的响应: ...
- java学习笔记——springmvc 之 数据自定义转换器 数据格式化 JSR303数据校验返回与接收JSON(@RequestBody 和 @ResponseBody)
九.数据绑定流程分析 1.提出问题 日期字符串格式的表单参数,提交后转换为Date类型 <!-- 解决问题: 1.数据类型转换 2.数据格式 3.数据校验 --> BirthDay ...
- JSR-303数据校验
JSR-303数据校验 1.JSR-303数据校验简介 2.常用校验注解 3.使用 3.1 导入依赖 3.2 添加注解 3.3 测试 4.实战项目中用到实例 1.JSR-303数据校验简介 JSR是J ...
- JSR303数据校验方法
使用JSR303做后台数据校验是有效确保非法数据绕过前端提交数据,必须确保数据的有效性和准确性.方法步骤如下: 一.引入依赖 <dependency><groupId>org. ...
- JSR303数据校验快速入门
一.初步了解 (1)给Bean添加校验注解( javax.validation.constraints.*),并定义自己的message提示信息 查看有哪些校验注解: 查看校验信息:快速按shift键 ...
- JSR303数据校验-2021新版
第一步 导入数据校验的jar包 <dependency><groupId>org.springframework.boot</groupId><artifac ...
- JSR-303 数据校验学习
@ConfigurationProperties标识的类支持JSR-303校验 JSR 303 - Bean Validation 介绍及最佳实践 一.JSR-303简介 JSR-303 是 JAVA ...
- JSR303数据校验介绍和使用
1.介绍: JSR全称Java Specification Requests,即Java 规范提案,有很多的JSR校验,JSR就是一种java标准,JSR 303是其中的一种 2.为什么要使用JSR3 ...
- JSR303数据校验(分组校验)
分组校验应用场景: 添加操作时不需要指定实体类的id 修改操作时需要指定实体类的id 1.建两个接口,作为添加及修改的标识 2.在使用JSR303注解时添加group属性 3.在添加及编辑操作时使用@ ...
最新文章
- .NET编码解码(HtmlEncode与HtmlEncode)
- python怎么判断一个文件是否存在-利用Python如何判断一个文件是否存在
- SP2-0618: Cannot find the Session Identifier. Check PLUSTRACE role is enable
- 新手求大神,有其他swit-case的思路写这个程序么?
- Depth-first Search深度优先搜索专题6
- FreeBSD6.1学习笔记[转]
- 【php】基础学习4
- 阿里代码规范检测工具-eclipse
- WTEditor(windows窗口标题栏文字修改工具)绿色单文件版V1.0 | windows窗口标题文字怎么修改?
- cad如何多选对象_cad如何多选?在CAD里为什么只能选中一个对象,而不能累加选择多个对象?...
- 【多功能改进】基于OpenCV图像采集的人脸识别网络推流及局域网无线控制系统(将图像在URL地址上输出,可做成网络摄像头,带识别框)
- CAD修复块中心点(网页版)
- 《弃子长安》第十一章 一路向西
- BUUCTF MISC 二维码扫描
- Android ADB原理及常用命令
- vue的简单使用3-v-for、v-if、v-show等指令的使用
- 跃迁:从技术到管理的硅谷路径
- Python实现的通讯录
- stm32的DAC输出
- chrome开发者工具_如何使用Chrome开发者工具查找性能瓶颈