Tabla de contenido
1. Dependencias de importación
1. Dependencias de importación
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>
2. Pasos de implementación
1. Agregue anotaciones a las propiedades correspondientes de la clase de entidad: javax.validation.constraints y defina sus propios avisos de mensajes, de la siguiente manera:
/**
* 品牌名
*/
@NotBlank(message = "品牌名不能为空")
private String name;
2. Habilite la función de verificación @Valid, habrá una respuesta predeterminada después del error de verificación, pero el mensaje anterior tiene prioridad
/**
* 保存
*/
@RequestMapping("/save")
//@RequiresPermissions("product:brand:save")
public R save(@Valid @RequestBody BrandEntity brand){
brandService.save(brand);
return R.ok();
}
3. Después de que el Bean verificado sea seguido por un BindingResult , se puede obtener el resultado de la verificación.
/**
* 保存
*/
@RequestMapping("/save")
//@RequiresPermissions("product:brand:save")
public R save(@Valid @RequestBody BrandEntity brand, BindingResult Result){
brandService.save(brand);
return R.ok();
}
Tres, verificación de grupo
1. Verificación de grupo (verificación compleja de múltiples escenarios) . Cuando el número de campos de verificación recién agregados y actualizados es diferente, se puede usar la agrupación. Primero, agregue un grupo después de la anotación en el atributo y marque lo que debe verificarse.
Agregue dos interfaces primero, no es necesario implementar nada
public interface AddGroup {
}
public interface UpdateGroup {
}
Tipo de etiqueta en atributo
/**
* 品牌id
*/
@NotNull(message = "修改必须指定品牌id", groups = UpdateGroup.class)
@Null(message = "新增不能指定id", groups = AddGroup.class)
@TableId
private Long brandId;
Luego cambie el método a la anotación validada, puede agregar el tipo de agrupación
/**
* 保存
*/
@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();
}
Tenga en cuenta que las anotaciones de grupo que no especifican un grupo de forma predeterminada no son efectivas. Por ejemplo, @Validated(AddGroup.class) solo se validará si el grupo AddGroup está marcado, y @Validated solo se usará si no se especifica el grupo. es decir, si no se especifica el grupo.
4. Verificación personalizada
1. Escriba una anotación de validación personalizada
@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. Escribe un validador personalizado
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. Asociar anotaciones de validación personalizadas y validadores personalizados
@Constraint(validatedBy = { ListValueConstraintValidator.class}) //这里可以放置多个校验器,我们只写了对integer的校验,还可以写别的类型,springboot会自动匹配对应的校验器
public @interface ListValue
4. Marque la anotación en el atributo
/**
* 显示状态[0-不显示;1-显示]
*/
@ListValue(vals = {0, 1}, groups = AddGroup.class)
private Integer showStatus;