SpringMVC admite la verificación de datos es el estándar JSR303, y se verifica escribiendo @notnull, @max, etc. en las propiedades del bean. JSR303 proporciona muchas interfaces de anotación, y SpringMVC usa Hibernate para estas verificaciones, por lo que necesitamos agregar un paquete de validador para Hibernate:
Confiar en las citas
compilar 'javax.validation: validation-api: 2.0.0.final' compilar 'org.hibernate: hibernate-validator: 6.0.0.final'
El marco ha proporcionado verificación de la siguiente manera:
Verifique las anotaciones proporcionadas por JSR:
@Null El elemento anotado debe ser nulo
@Notnull El elemento anotado no debe ser nulo, no puede ser nulo, puede ser ""
@AssertTrue El elemento anotado debe ser verdad
@Assertfalse El elemento anotado debe ser falso
@Min (valor) El elemento anotado debe ser un número, y su valor debe ser mayor o igual al valor mínimo especificado.
@Max (valor) El elemento anotado debe ser un número, y su valor debe ser menor o igual al valor máximo especificado.
@Decimalmin (valor) El elemento anotado debe ser un número, y su valor debe ser mayor o igual al valor mínimo especificado
@DecimalMax (valor) El elemento anotado debe ser un número, y su valor debe ser menor o igual al valor máximo especificado
@Size (max =, min =) Verifique si la longitud del objeto (matriz, colección, mapa, cadena) está dentro del rango dado
@Digits (entero, fracción) El elemento anotado debe ser un número y su valor debe estar dentro de un rango aceptable.
@Past El elemento anotado debe ser una fecha pasada
@Future El elemento anotado debe ser una fecha futura
@Pattern (regex =, flag =) El elemento anotado debe cumplir con la expresión regular especificada
Verifique las anotaciones proporcionadas por Hibernate Validator:
@NotBlank (Message =) solo se puede usar en String, no NULL, y después de llamar a TRIM (), la longitud debe ser mayor que 0
@Email El elemento anotado debe ser una dirección de correo electrónico
@Length (min =, max =) El tamaño de la cadena anotada debe estar dentro del rango especificado.
@Notempty La cadena comentada debe ser no vacía, no puede ser nulo, "", puede ser ""
@Range (min =, max =, mensaje =) El elemento anotado debe estar dentro del rango apropiado
Demostración de ejemplo
Cree una clase de entidad que necesita ser verificada:
paquete com.yiba.wifi.news.bean.model; import org.hibernate.validator.constraints.length; import javax.validation.constraints.*; usuario de clase pública {@notblank (mensaje = "El nombre de usuario no puede ser nulo, la longitud debe ser mayor que 0") Nombre de cadena; // nombre de usuario @min (valor = 1, mensaje = "La edad mínima es de 1 año") @max (valor = 120, mensaje = "edad máxima es 120") edad entera; // edad @email (mensaje = "error de formato de caja de correo electrónico") @notblank (mensaje = "error de formato de caja de correo electrónico") String Correo electrónico; // correo electrónico @Length (min = 6, max = 12, mensaje = "La longitud de la contraseña debe estar entre 6 y 12 dígitos") cadena pwd; // contraseña // get, set .........}Tenga en cuenta que al verificar el correo electrónico, cuando el correo electrónico es "", o nulo, pasará la verificación de @email, por lo que la verificación del correo electrónico requiere @email y @notblank para trabajar juntos.
Diseño de la interfaz del controlador, agregar @Validated Keywley donde se acepta el parámetro
/ *** Interfaz de inicio de sesión* @return*/ @PostMapping ("Login") public String Login (@Valided @RequestBody User User) {return "OK"; }Pruebas de acceso:
Al acceder a los datos está en el siguiente formato
{"nombre": "", "edad": 0, "correo electrónico": "", "pwd": ""}La respuesta es:
{"Timestamp": 1524640724522, "Status": 400, "Error": "solicitud mala", "excepción": "org.springframework.web.bind.methodargumentnotValidException", "errores": [{"Codes": ["Notblank.User.Mail", "no Bblank.email", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ","? "Notblank.java.lang.string", "NotBlank"], "Argumentos": [{"Codes": ["User.Email", "Correo electrónico"], "Argumentos": NULL, "DefaultMessage": "Correo electrónico", "Código": "Correo electrónico"}], "Media predeterminada": "Error de formato de correo electrónico", "Objeto": "Usor", "Campo": "Campo", "Campo" "," Campo "," Campo "," Campo "," Campo "," Campo "," Campo "," Campo "" "rejectedValue": "", "bindingFailure": false, "code": "NotBlank" }, { "codes": [ "NotBlank.user.name", "NotBlank.name", "NotBlank.java.lang.String", "NotBlank" ], "arguments": [ { "codes": [ "user.name", "name" ], "arguments": nulo, "defaultMessage": "nombre", "código": "nombre"}], "defaultMessage": "Nombre de usuario no puede ser nulo, la longitud debe ser mayor que 0", "ObjectName": "User", "campo": "Nombre", "Rechazado": "", "Bindefailure": False, "Code": "Notblank"}, {"Codes": [Codes ": [Codes" "Longitud.user.pwd", "longitud.pwd", "longitud.java.lang.string", "longitud"], "argumentos": [{"códigos": ["user.pwd", "pwd"], "argumentos": nulo, "predeterminado": "pwd", "código": "pwd"}, 12, 6], " 6 and 12 bits", "objectName": "user", "field": "pwd", "rejectedValue": "", "bindingFailure": false, "code": "Length" }, { "codes": [ "Min.user.age", "Min.age", "Min.java.lang.Integer", "Min" ], "arguments": [ { "codes": [ "user.age", "edad"], "argumentos": nulo, "defaultMessage": "edad", "código": "edad"}, 1], "defaultMessage": "la edad mínima es 1 año de edad", "objeto": "usuario", "campo": "edad", "rechazó elvalue": 0, "biingfailure": false falso, "código": "mín" mín "mín". objeto = 'Usuario'.Puede ver que la solicitud local no ha podido verificar los 4 campos. Entonces, ¿hay alguna forma de obtener información de excepción? La respuesta es sí, y necesitamos modificar la interfaz del controlador.
/** * Interfaz de inicio de sesión * * @return */@PostMapping ("Login") public String Login (@Validated @RequestBody User User, BindingResult BindingResult) {if (bindingResult.haserrors ()) {// Hay un check que falla listar <s objectérror> error = bindingResult.EgnErrors (); for (objEcterRor Error: ErrorList) {System.out.println (error.getDefaultMessage ()); // Mensaje de error específico de salida} return "Excepción de parámetro"; } return "ok"; }Solicitar nuevamente, el formato de solicitud es el siguiente
{"nombre": "", "edad": 0, "correo electrónico": "", "pwd": ""}La respuesta es la siguiente
Excepción de parámetros
La información impresa en la consola es la siguiente:
El nombre de usuario no puede ser nulo, la longitud debe ser mayor que 0
La longitud de la contraseña debe estar entre 6 y 12 dígitos, la edad mínima es un error de formato de correo electrónico de 1 año de antigüedad
Puede ver que hemos obtenido la información de verificación normalmente.
Hagamos un acceso correcto de referencia:
Los parámetros de solicitud son los siguientes:
{"Nombre": "Zhaoyanjun", "Age": 1, "Correo electrónico": "[email protected]", "pwd": "123456"}La respuesta es la siguiente:
DE ACUERDO
La consola no genera nada.
Resumir
Lo anterior es una demostración de ejemplo de la función de verificación de parámetros de solicitud de primavera introducida por el editor. Espero que sea útil para todos. Si tiene alguna pregunta, déjame un mensaje y el editor responderá a todos a tiempo. ¡Muchas gracias por su apoyo al sitio web de Wulin.com!