zoukankan      html  css  js  c++  java
  • 谷粒商城品牌管理校验(十)

    68、商品服务-API-品牌管理-JSR303分组校验

    JSR 303 分组校验

    (1)为什么使用 分组校验?
      通过上面的过程,可以了解到单个方法的校验规则。
      如果出现多个方法,都需要校验 Bean,且校验规则不同的时候,怎么办呢?
      分组校验就可以去解决该问题,每个分组指定不同的校验规则,不同的方法执行不同的分组,就可以得到不同的校验结果。

    (2)基本认识
      JSR 303 的每个注解都默认具备三个属性:
        message 用来定义数据校验失败后的提示消息,默认读取配置文件的内容。
          全局搜索 ValidationMessages.properties,可以看到默认的信息。

        groups 用来定义分组,其是一个 class 数组,可以指定多个分组。

    String message() default "{javax.validation.constraints.NotNull.message}";
    
    Class<?>[] groups() default { };
    
    Class<? extends Payload>[] payload() default { };

    (3)使用分组步骤:
    Step1:
      定义一个空接口,用于指定分组,内部不需要任何实现。

    Step2:
      指定 注解时,通过 groups 指定分组。用于指定在某个分组条件下,才去执行校验规则。

    Step3:
      在相关的业务方法上,通过 @Validated 注解指定分组,去指定校验。
    注:
      使用分组校验后,Bean 注解上若不指定分组,则不会执行校验规则。

    (4)使用:
    Step1:
      创建分组接口。
      创建两个分组接口 AddGroup、UpdateGroup。
    其中:
      AddGroup 用于指定 添加数据 时的校验规则(比如:id、name 均不为 null)。
      UpdateGroup 用于指定 修改数据 时的校验规则(比如:name 不允许为 null)。

    Step2:
      给 Bean 添加注解,并指定分组信息。

    /**
     * 品牌
     * 
     * @author dalianpai
     * @email dalianpai@163.com
     * @date 2020-05-25 16:55:42
     */
    @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地址
    	 */
    	@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})
    	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;
    
    }

    Step3:
      在业务方法上,通过 @Validated 注解指定分组,去指定校验。
    如下例,定义两个方法,Post 请求会触发 createEmp 方法,Put 请求会触发 UpdateEmp 方法。

     /**
    * 保存
    */
    @RequestMapping("/save")
    public R save(@Validated({AddGroup.class}) @RequestBody BrandEntity brand){
    brandService.save(brand);
    return R.ok();
    }

    /**
    * 修改
    */
    @RequestMapping("/update")
    public R update(@Validated(UpdateGroup.class) @RequestBody BrandEntity brand){
    brandService.updateById(brand);

    return R.ok();
    }

    Step4:
      使用 Postman 测试

     

  • 相关阅读:
    一个简单的开源PHP爬虫框架『Phpfetcher』
    OpenNI1.5获取华硕XtionProLive深度图和彩色图并用OpenCV显示
    【数字图像处理之(三)】用图像增强谈灰度变换
    Android 实现登录界面和功能实例
    MFC通过button控制编辑框是否显示系统时间
    springmvc+mybatis整合
    iOS获取当前城市
    Android之Wifi学习(1)
    实测:Windows 8.1 (Windows Blue) 第三方桌面应用无法支持Retina屏,效果与Windows8.0似无差别。
    java 读取不同的配置文件
  • 原文地址:https://www.cnblogs.com/dalianpai/p/13027570.html
Copyright © 2011-2022 走看看