后端在处理前端传过来的数据时,尽管前端表单已经加了校验逻辑,但是作为严谨考虑,在后端对接口传输的数据做校验也必不可少。

开启校验:
实体类上增加校验注解,接口参数前增加@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数据校验相关推荐

  1. 品牌管理-JSR303数据校验

    JSR303 1).给Bean添加校验注解:javax.validation.constraints,并定义自己的message提示 2).开启校验功能@Valid效果:校验错误以后会有默认的响应: ...

  2. java学习笔记——springmvc 之 数据自定义转换器 数据格式化 JSR303数据校验返回与接收JSON(@RequestBody 和 @ResponseBody)

    九.数据绑定流程分析 1.提出问题 日期字符串格式的表单参数,提交后转换为Date类型 <!--    解决问题: 1.数据类型转换 2.数据格式 3.数据校验 --> BirthDay ...

  3. JSR-303数据校验

    JSR-303数据校验 1.JSR-303数据校验简介 2.常用校验注解 3.使用 3.1 导入依赖 3.2 添加注解 3.3 测试 4.实战项目中用到实例 1.JSR-303数据校验简介 JSR是J ...

  4. JSR303数据校验方法

    使用JSR303做后台数据校验是有效确保非法数据绕过前端提交数据,必须确保数据的有效性和准确性.方法步骤如下: 一.引入依赖 <dependency><groupId>org. ...

  5. JSR303数据校验快速入门

    一.初步了解 (1)给Bean添加校验注解( javax.validation.constraints.*),并定义自己的message提示信息 查看有哪些校验注解: 查看校验信息:快速按shift键 ...

  6. JSR303数据校验-2021新版

    第一步 导入数据校验的jar包 <dependency><groupId>org.springframework.boot</groupId><artifac ...

  7. JSR-303 数据校验学习

    @ConfigurationProperties标识的类支持JSR-303校验 JSR 303 - Bean Validation 介绍及最佳实践 一.JSR-303简介 JSR-303 是 JAVA ...

  8. JSR303数据校验介绍和使用

    1.介绍: JSR全称Java Specification Requests,即Java 规范提案,有很多的JSR校验,JSR就是一种java标准,JSR 303是其中的一种 2.为什么要使用JSR3 ...

  9. JSR303数据校验(分组校验)

    分组校验应用场景: 添加操作时不需要指定实体类的id 修改操作时需要指定实体类的id 1.建两个接口,作为添加及修改的标识 2.在使用JSR303注解时添加group属性 3.在添加及编辑操作时使用@ ...

最新文章

  1. .NET编码解码(HtmlEncode与HtmlEncode)
  2. python怎么判断一个文件是否存在-利用Python如何判断一个文件是否存在
  3. SP2-0618: Cannot find the Session Identifier. Check PLUSTRACE role is enable
  4. 新手求大神,有其他swit-case的思路写这个程序么?
  5. Depth-first Search深度优先搜索专题6
  6. FreeBSD6.1学习笔记[转]
  7. 【php】基础学习4
  8. 阿里代码规范检测工具-eclipse
  9. WTEditor(windows窗口标题栏文字修改工具)绿色单文件版V1.0 | windows窗口标题文字怎么修改?
  10. cad如何多选对象_cad如何多选?在CAD里为什么只能选中一个对象,而不能累加选择多个对象?...
  11. 【多功能改进】基于OpenCV图像采集的人脸识别网络推流及局域网无线控制系统(将图像在URL地址上输出,可做成网络摄像头,带识别框)
  12. CAD修复块中心点(网页版)
  13. 《弃子长安》第十一章 一路向西
  14. BUUCTF MISC 二维码扫描
  15. Android ADB原理及常用命令
  16. vue的简单使用3-v-for、v-if、v-show等指令的使用
  17. 跃迁:从技术到管理的硅谷路径
  18. Python实现的通讯录
  19. stm32的DAC输出
  20. chrome开发者工具_如何使用Chrome开发者工具查找性能瓶颈

热门文章

  1. [共享]iOS开发系列--Swift语言
  2. 清华教授发文劝退读博:​​我见过太多博士生精神崩溃、心态失衡、身体垮掉、一事无成!
  3. 你们家的摄像头安全吗?如何管理海量弱密码
  4. CenterPoint论文和代码解析
  5. IDesign C#编码规范(五)
  6. 试飞遭遇无动力失速尾旋
  7. java客户端绑定支付宝_Android客户端集成支付宝快捷支付
  8. 自动化测试框架怎么设计?我来告诉你
  9. vue3+element-plus搭建后台管理系统(一)
  10. Network第一章总结