Verificación de antecedentes

Marco de validación en segundo plano BeanValidate

Uno. Importa las siguientes dependencias en Maven
  <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>6.0.13.Final</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/javax.validation/validation-api -->
    <dependency>
        <groupId>javax.validation</groupId>
        <artifactId>validation-api</artifactId>
        <version>6.0.13.Final</version>
    </dependency>
2) Agregue la siguiente configuración en spring-context
<bean id="validator"  class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>
    <bean id="beanValidator" class="com.twgfs.commons.utils.BeanValidator">
        <property name="validator" ref="validator" />
    </bean>

Nota: arribaEl com.twgfs.commons.utils.BeanValidator detrás de la clase dentro es la ubicación del paquete de verificación Java

3) Verificación de escritura
package com.twgfs.commons.utils;

import org.springframework.beans.factory.annotation.Autowired;

import javax.validation.ConstraintViolation;
import javax.validation.ConstraintViolationException;
import javax.validation.Validator;
import java.util.*;

public class BeanValidator {
    @Autowired
    private static Validator validator;

    public static void setValidator(Validator validator) {
        BeanValidator.validator = validator;
    }

    /**
     *调用 JSR303 的 validate 方法, 验证失败时抛出 ConstraintViolationException.
     */
    private static void validateWithException(Validator validator, Object object, Class<?>... groups) throws ConstraintViolationException {
        Set constraintViolations = validator.validate(object, groups);
        if (!constraintViolations.isEmpty()) {
            throw new ConstraintViolationException(constraintViolations);
        }
    }


     /*辅助方法, 转换 ConstraintViolationException 中的 Set<ConstraintViolations> 中为 List<message>.*/

    private static List<String> extractMessage(ConstraintViolationException e) {
        return extractMessage(e.getConstraintViolations());
    }


      /*辅助方法, 转换 Set<ConstraintViolation> 为 List<message>*/

    private static List<String> extractMessage(Set<? extends ConstraintViolation> constraintViolations) {
        List<String> errorMessages = new ArrayList<>();
        for (ConstraintViolation violation : constraintViolations) {
            errorMessages.add(violation.getMessage());
        }
        return errorMessages;
    }

    //辅助方法, 转换 ConstraintViolationException 中的 Set<ConstraintViolations> 为 Map<property, message>.

    private static Map<String, String> extractPropertyAndMessage(ConstraintViolationException e) {
        return extractPropertyAndMessage(e.getConstraintViolations());
    }

    //辅助方法, 转换 Set<ConstraintViolation> 为 Map<property, message>.

    private static Map<String, String> extractPropertyAndMessage(Set<? extends ConstraintViolation> constraintViolations) {
        Map<String, String> errorMessages = new HashMap<>();
        for (ConstraintViolation violation : constraintViolations) {
            errorMessages.put(violation.getPropertyPath().toString(), violation.getMessage());
        }
        return errorMessages;
    }


    //辅助方法, 转换 ConstraintViolationException 中的 Set<ConstraintViolations> 为 List<propertyPath message>.

    private static List<String> extractPropertyAndMessageAsList(ConstraintViolationException e) {
        return extractPropertyAndMessageAsList(e.getConstraintViolations(), " ");
    }

//辅助方法, 转换 Set<ConstraintViolations> 为 List<propertyPath message>.

    private static List<String> extractPropertyAndMessageAsList(Set<? extends ConstraintViolation> constraintViolations) {
        return extractPropertyAndMessageAsList(constraintViolations, " ");
    }

//辅助方法, 转换 ConstraintViolationException 中的 Set<ConstraintViolations> 为 List<propertyPath + separator + message>.

    private static List<String> extractPropertyAndMessageAsList(ConstraintViolationException e, String separator) {
        return extractPropertyAndMessageAsList(e.getConstraintViolations(), separator);
    }

    //辅助方法, 转换 Set<ConstraintViolation> 为 List<propertyPath + separator + message>.

    private static List<String> extractPropertyAndMessageAsList(Set<? extends ConstraintViolation> constraintViolations, String separator) {
        List<String> errorMessages = new ArrayList<>();
        for (ConstraintViolation violation : constraintViolations) {
            errorMessages.add(violation.getPropertyPath() + separator + violation.getMessage());
        }
        return errorMessages;
    }
    /**
     * 服务端参数有效性验证
     *
     * @param object 验证的实体对象
     * @param groups 验证组
     * @return 验证成功:返回 null;验证失败:返回错误信息
     */
    public static String validator(Object object, Class<?>... groups) {
        try {
            validateWithException(validator, object, groups);
        } catch (ConstraintViolationException ex) {
            List<String> list = extractMessage(ex);
            list.add(0, "注意:");

            // 封装错误消息为字符串
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < list.size(); i++) {
                String exMsg = list.get(i);
                if (i != 0 ){
                    sb.append(String.format("%s. %s", i, exMsg)).append(list.size() > 1 ? "&nbsp;&nbsp;" : "");
                } else {
                    sb.append(exMsg).append(list.size() > 1 ? "&nbsp;&nbsp;" : "");
                }
            }
            return sb.toString();
        }
        return null;
    }
}

Nota: Esta clase es una clase de captura de excepciones, se agrega un método al final de la clase de la siguiente manera

public static String validator(Object object, Class<?>... groups) {
        try {
            validateWithException(validator, object, groups);
        } catch (ConstraintViolationException ex) {
            List<String> list = extractMessage(ex);
            list.add(0, "注意:");

            // 封装错误消息为字符串
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < list.size(); i++) {
                String exMsg = list.get(i);
                if (i != 0 ){
                    sb.append(String.format("%s. %s", i, exMsg)).append(list.size() > 1 ? "&nbsp;&nbsp;" : "");
                } else {
                    sb.append(exMsg).append(list.size() > 1 ? "&nbsp;&nbsp;" : "");
                }
            }
            return sb.toString();//返回自己写的错误提示信息
        }
        return null;
    }

Esto se utiliza para capturar el error de verificación y luego generar la información de error correspondiente. Este método generará la información en la anotación de acuerdo con su anotación en la clase de entidad.

4) Agregue las anotaciones correspondientes a los campos que deben verificarse en el fondo de la clase de entidad. La siguiente es mi clase de entidad.
package com.twgfs.domain.entity;
import com.twgfs.commons.utils.RegexpUtils;
import lombok.Data;

import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.Pattern;

@Data
public class User {
  private Integer id;
 @NotEmpty(message = "用户名不能为空")
  private String username;
  @NotEmpty(message = "密码不能为空")
  private String password;
  @NotEmpty(message = "电话号码不能为空")
  @Pattern(regexp = RegexpUtils.PHONE, message = "手机格式不正确")
  private String phone;
  @NotEmpty(message = "邮箱不能为空")
  @Pattern(regexp = RegexpUtils.EMAIL, message = "邮箱格式不正确")
  private String email;
  //数据库ORM会忽略该字段
//  @Transient
//  public int totalPage;

}

1. Lo anterior @NotEmpty es una verificación no vacía en Validar. Si agrega un mensaje = "XXXXX" en el principal, se verificará cuando el valor de entrada esté vacío. Escriba la clase de verificación para capturar y obtenga el valor correspondiente. Si necesita realizar una verificación regular, puede agregar @Pattern (regexp = RegexpUtils.EMAIL, mensaje = "el formato del buzón es incorrecto") en el campo correspondiente que debe verificarse , Pero aquí RegexpUtils.EMAIL es un campo en la clase regular que se va a emparejar, la clase regular que se empareja es la siguiente

package com.twgfs.commons.utils;

public class RegexpUtils {
    /**
     * 验证手机号
     */
    public static final String PHONE = "^((13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$";

    /**
     * 验证邮箱地址
     */
    public static final String EMAIL = "\\w+(\\.\\w)*@\\w+(\\.\\w{2,3}){1,3}";

    /**
     * 验证手机号
     * @param phone
     * @return
     */
    public static boolean checkPhone(String phone) {
        return phone.matches(PHONE);
    }

    /**
     * 验证邮箱
     * @param email
     * @return
     */
    public static boolean checkEmail(String email) {
        return email.matches(EMAIL);
    }
}

5. Después de una serie de estos preparativos, se puede usar en el proyecto, aquí hay una verificación no vacía de mi módulo de registro, por ejemplo.
@RequestMapping("/regist")
    public String regist(User user, Model model){
        String result = BeanValidator.validator(user);
        int flag = loginRegistService.ToRegist(user);
        model.addAttribute("validatemsg",result);
        System.out.println(result+"=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-");
        return "index";
    }
  1. Aquí String result = BeanValidator.validator (usuario); es para aplicar la validación al proyecto
  2. Coloque el usuario de la clase de mapeo de entidad registrado en primer plano en BeanValidator.validator (usuario) para completar la verificación en segundo plano
  3. La clase de entidad de la verificación en segundo plano se verifica de acuerdo con la anotación. Si se encuentra una falta de coincidencia, se informará un error, y luego el error será capturado por la clase de verificación escrita para emitir uno por uno de acuerdo con el contenido de la clase en el mensaje en la clase de entidad El resultado impreso aquí no coincide
Publicado 19 artículos originales · elogiado 7 · vistas 6633

Supongo que te gusta

Origin blog.csdn.net/William_TWG/article/details/85235932
Recomendado
Clasificación