JSR303数据校验

简介: JSR303数据校验

标注校验注解

javax.validation.constraints 中定义了非常多的校验注解

@Email、@Future、@NotBlank、@Size 等

 使用校验功能

@Valid 开启校验功能

 提取校验错误信息


BindingResult 获取校验结果


 分组校验与自定义校验


Groups 定义校验分组信息; 可以编写自定义校验注解和自定义校验器 默认情况下,异常信息会从应用的 classpath 下的 ValidationMessages.properties 文件中加载


例子


* 1)给bean添加校验注解,并定义自己的message提示

* 2)开启校验功能@valid

* 效果:校验错误以后会有默认的响应

* 3)给校验的bean后紧跟一个bindingResult ,就可以获取到校验结果

* 4)分组校验

*    1)@NotNull(message = "修改必须指定品牌id",groups = UpdateGroup.class)

       @Null(message = "新增不能指定id",groups = AddGroup.class)

*    2)@Validated(UpdateGroup.class)

*    3)默认没有指定分组的校验注解,@Null,在分组校验的情况下@Validated(UpdateGroup.class)不生效


public interface AddGroup {
}
public interface UpdateGroup {
}
@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)
  @TableId
  private Long brandId;
  /**
   * 品牌名
   */
  @NotBlank(message = "品牌名必须提交",groups = {AddGroup.class,UpdateGroup.class})
  private String name;
  /**
   * 品牌logo地址
   */
  @NotEmpty(groups = AddGroup.class)
  @URL(message = "logo必须是一个url地址",groups = {AddGroup.class,UpdateGroup.class})
  private String logo;
  /**
   * 介绍
   */
  private String descript;
  /**
   * 显示状态[0-不显示;1-显示]
   */
  @ListValue(vals = {0,1},groups = {UpdateStatusGroup.class})
  @NotNull
  private Integer showStatus;
  /**
   * 检索首字母
   */
    @NotEmpty(groups = AddGroup.class)
    @Pattern(regexp = "^[a-zA-Z]$",message = "检索首字母必须是首字母",groups = {AddGroup.class,UpdateGroup.class})
  private String firstLetter;
  /**
   * 排序
   */
    @NotEmpty(groups = AddGroup.class)
  @Min(value = 0,message = "排序必须大于等于0",groups = {AddGroup.class,UpdateGroup.class})
  private Integer sort;
}
    /**
     * 保存
     */
    @RequestMapping("/save")
    public R save(@Validated({  AddGroup.class })@RequestBody BrandEntity brand, BindingResult result){
        if(result.hasErrors()){
            //1.获取校验错误的结果
            Map<String, String> map = new HashMap<>();
            result.getFieldErrors().forEach((item)->{
           //FieldError获取到错误的提示
           String message = item.getDefaultMessage();
            //获取错误的属性的名字
           String field = item.getField();
           map.put(field,message);
           System.out.println("******");
       });
            return R.error(400,"提交的数据不合法").put("data",map);
        }
            brandService.save(brand);
            return R.ok();
    }
    /**
     * 修改
     */
    @RequestMapping("/update")
    public R update(@Validated(UpdateGroup.class)@RequestBody BrandEntity brand){
    brandService.updateById(brand);
        return R.ok();
    }
相关文章
常见的BUG---1、虚拟机启动之后,突然发现没有ens33网卡
常见的BUG---1、虚拟机启动之后,突然发现没有ens33网卡
|
Windows
Windows下CMD中文乱码问题解决方法,设置代码页65001后仍然乱码
原文地址: http://blog.csdn.net/u011250882/article/details/48136883 在中文Windows系统中,如果一个文本文件是UTF-8编码的,那么在CMD.exe命令行窗口(所谓的DOS窗口)中不能正确显示文件中的内容。在默认情况下,命令行窗口中使用的代码页是中文或者美国的,即编码是中文字符集或者西文字符集。  如果想正确显示UTF-8
13213 0
|
前端开发
flowable流程设计器的几个bug修改记录
flowable流程设计器的几个bug修改记录
300 0
|
负载均衡 Java Nacos
SpringCloud基础2——Nacos配置、Feign、Gateway
nacos配置管理、Feign远程调用、Gateway服务网关
SpringCloud基础2——Nacos配置、Feign、Gateway
|
Java 数据库连接 Spring
Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could
这个错误通常出现在使用Spring Boot进行数据库连接时。错误信息表明Spring Boot未能配置一个DataSource,因为没有指定'url'属性,并且没有发现默认的数据库连接。
4007 0
|
关系型数据库 MySQL Java
Failed to configure a DataSource: ‘url‘ attribute is not specified and no embedded datasource could
解决方法: 配置H2数据库或者MySQL数据库,其中配置MySQL解决方法如下: 1、添加 MySQL连接驱动的依赖 Maven工程在pom.xml中添加
2412 0
|
Java Spring
mybatisplus的typeAliasesPackage 配置
【6月更文挑战第20天】mybatisplus的typeAliasesPackage 配置
1282 3
|
应用服务中间件 Nacos 数据库
SpringCloud微服务之Nacos集群搭建
SpringCloud微服务之Nacos集群搭建
617 0
|
Docker 容器
docker 镜像源大全
docker 镜像源大全
105745 3
docker 镜像源大全