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 测试

     

  • 相关阅读:
    标记场景发生改变
    粗体EditorGUI
    unity shader 编辑器扩展类 ShaderGUI
    让打开文件夹直接在某路径打开
    利用asset存储mesh
    获取输入的键
    2013 Visual Studio Magazine读者选择奖界面框架类获奖情况
    DevExpress VCL 13.1.4支持Delphi /C++Builder XE5
    DevExpress更新至13.1.7
    转:与Microsoft Visual Studio集成良好的第三方工具
  • 原文地址:https://www.cnblogs.com/dalianpai/p/13027570.html
Copyright © 2011-2022 走看看