Проверка серверной части JSR303

Оглавление

1. Импорт зависимостей

2. Этапы реализации

Три, групповая проверка

4. Пользовательская проверка


1. Импорт зависимостей

        <dependency>
            <groupId>javax.validation</groupId>
            <artifactId>validation-api</artifactId>
            <version>2.0.1.Final</version>
        </dependency>

2. Этапы реализации

1. Добавьте аннотации к соответствующим свойствам класса сущности: javax.validation.constraints и определите свои собственные подсказки сообщений следующим образом:

/**
 * 品牌名
 */
@NotBlank(message = "品牌名不能为空")
private String name;

2. Включите функцию проверки @Valid, и после ошибки проверки будет ответ по умолчанию, но вышеприведенное сообщение имеет приоритет

  /**
   * 保存
   */
  @RequestMapping("/save")
  //@RequiresPermissions("product:brand:save")
  public R save(@Valid @RequestBody BrandEntity brand){
      brandService.save(brand);
      return R.ok();
  }

3. После того, как за проверенным Bean следует BindingResult , можно получить результат проверки.

  /**
   * 保存
   */
  @RequestMapping("/save")
  //@RequiresPermissions("product:brand:save")
  public R save(@Valid @RequestBody BrandEntity brand, BindingResult Result){
      brandService.save(brand);
      return R.ok();
  }

Три, групповая проверка

1. Групповая проверка (многосценарная комплексная проверка) .При разном количестве вновь добавляемых и обновляемых полей проверки можно использовать группировку.Сначала добавить группу после аннотации к атрибуту, и отметить, что нужно проверить

Сначала добавьте два интерфейса, не нужно ничего реализовывать

public interface AddGroup {
}
public interface UpdateGroup {
}

Тип метки на атрибуте

/**
 * 品牌id
 */
@NotNull(message = "修改必须指定品牌id", groups = UpdateGroup.class)
@Null(message = "新增不能指定id", groups = AddGroup.class)
@TableId
private Long brandId;

Затем измените метод на проверенную аннотацию, вы можете добавить тип группировки

    /**
     * 保存
     */
    @RequestMapping("/save")
    public R save(@Validated(AddGroup.class) @RequestBody BrandEntity brand){
            brandService.save(brand);
        return R.ok();
    }
    
    /**
     * 修改
     */
    @RequestMapping("/update")
    //@RequiresPermissions("product:brand:update")
    public R update(@Validated(UpdateGroup.class) @RequestBody BrandEntity brand){
        brandService.updateById(brand);
        return R.ok();
    }

Обратите внимание, что групповые аннотации, в которых не указана группа по умолчанию, недействительны. Например, @Validated(AddGroup.class) будет проверен, только если отмечена группа AddGroup. Если указанная группа не указана, она будет только в @Validated , то есть если группа не указана.

4. Пользовательская проверка

1. Напишите пользовательскую аннотацию проверки

@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE})
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = { ListValueConstraintValidator.class}) //这里可以放置多个校验器,我们只写了对integer的校验,还可以写别的类型,springboot会自动匹配对应的校验器
public @interface ListValue {
    String message() default "{com.atguigu.common.valid.ListValue.message}";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
    int[] vals() default {};
}

2. Напишите собственный валидатор

public class ListValueConstraintValidator implements ConstraintValidator<ListValue, Integer> {
    private Set<Integer> set = new HashSet<>();
    // 初始化方法
    @Override
    public void initialize(ListValue constraintAnnotation) {
        int[] vals = constraintAnnotation.vals();
        for(int val: vals) {
            set.add(val);
        }
    }
    /*
     * @Description
     * @Author zoe
     * @Date 2023/7/13 16:52
     * @Param integer就是要进行校验的值
     **/
    @Override
    public boolean isValid(Integer integer, ConstraintValidatorContext constraintValidatorContext) {
        return set.contains(integer);
    }
}

3. Свяжите пользовательские аннотации проверки и пользовательские валидаторы

@Constraint(validatedBy = { ListValueConstraintValidator.class}) //这里可以放置多个校验器,我们只写了对integer的校验,还可以写别的类型,springboot会自动匹配对应的校验器
public @interface ListValue

4. Отметьте аннотацию атрибута


    /**
     * 显示状态[0-不显示;1-显示]
     */
    @ListValue(vals = {0, 1}, groups = AddGroup.class)
    private Integer showStatus;

Guess you like

Origin blog.csdn.net/m0_62946761/article/details/131988108