¿Cuál es el mecanismo de validación y enlace de datos en Spring MVC y cómo usarlo?

En las aplicaciones Spring MVC, el enlace y la verificación de datos son partes muy importantes: pueden ayudarnos a vincular los datos enviados por el usuario a objetos Java y verificar los datos para garantizar la exactitud y confiabilidad de los datos. En Spring MVC, los mecanismos de validación y enlace de datos se implementan mediante anotaciones. Este artículo presentará los mecanismos de validación y enlace de datos en Spring MVC y cómo usarlos.

Insertar descripción de la imagen aquí

el enlace de datos

El enlace de datos es el proceso de vincular datos enviados por el usuario a objetos Java. En Spring MVC, el enlace de datos se logra mediante la anotación @ModelAttribute.

Anotación @ModelAttribute

La anotación @ModelAttribute se utiliza para vincular parámetros de solicitud a objetos Java y se puede utilizar en parámetros de método o valores de retorno de método.

Cuando la anotación @ModelAttribute se utiliza en los parámetros de un método, indica que los parámetros de la solicitud están vinculados a los parámetros del método. Por ejemplo:

@GetMapping("/user")
public String getUser(@ModelAttribute("id") Long id) {
    
    
    // ...
}

En este ejemplo, la anotación @ModelAttribute("id") indica que el parámetro denominado id en el parámetro de solicitud HTTP está vinculado al parámetro id del método.

Cuando se utiliza la anotación @ModelAttribute en el valor de retorno de un método, significa que el valor de retorno del método se agrega al modelo. Por ejemplo:

@ModelAttribute("user")
public User getUser(@RequestParam("id") Long id) {
    
    
    User user = userRepository.findById(id).orElse(null);
    return user;
}

En este ejemplo, la anotación @ModelAttribute(“usuario”) agrega el valor de retorno del método getUser al modelo y hace referencia a él en la vista utilizando una variable denominada usuario.

Conversión de tipo de datos

Al vincular parámetros de solicitud a un objeto Java, Spring MVC los convierte automáticamente según el tipo de objeto Java. Por ejemplo, al vincular un parámetro de solicitud a una propiedad de tipo Integer, Spring MVC convertirá automáticamente el parámetro de solicitud de tipo cadena en un tipo Integer.

Si el tipo del parámetro de solicitud no coincide con el tipo del objeto Java, o si el parámetro de solicitud no tiene el formato correcto, el enlace de datos fallará. En este momento, Spring MVC generará una excepción y devolverá la información de la excepción al cliente.

Uso de enlace de datos

El enlace de datos puede ayudarnos a vincular los datos enviados por los usuarios a objetos Java, simplificando la escritura de código. Cuando utilizamos el enlace de datos, necesitamos definir un objeto Java para almacenar los datos enviados por el usuario. Luego podemos usar la anotación @ModelAttribute para vincular los parámetros de solicitud al objeto Java y luego usar el objeto Java en el controlador para procesar los datos enviados por el usuario.

Por ejemplo, definimos una clase de Usuario para almacenar datos enviados por el usuario:

public class User {
    
    
    private Long id;

    private String name;

    private Integer age;

    // getters and setters
}

Luego, usamos la anotación @ModelAttribute en el controlador para vincular los parámetros de solicitud al objeto Usuario:

@PostMapping("/user")
public String saveUser(@ModelAttribute("user") User user) {
    
    
    // ...
}

En este ejemplo, la anotación @ModelAttribute("usuario") indica que los parámetros de la solicitud están vinculados al objeto Usuario denominado usuario.

verificación de datos

La verificación de datos consiste en verificar los datos enviados por los usuarios para garantizar la exactitud y confiabilidad de los datos. En Spring MVC, la validación de datos se implementa mediante la anotación @Valid y el validador (Validator).

@Anotación válida

La anotación @Valid se utiliza para habilitar la validación de datos. Se puede utilizar en parámetros de método o valores de retorno de método.

Cuando se utiliza la anotación @Valid en los parámetros de un método, indica la validación de datos de los parámetros del método. Por ejemplo:

@PostMapping("/user")
public String saveUser(@Valid @ModelAttribute("user") User user, BindingResult result) {
    
    
    // ...
}

En este ejemplo, la anotación @Valid representa la validación de datos en el objeto Usuario vinculado a la anotación @ModelAttribute("usuario").

Cuando se utiliza la anotación @Valid en el valor de retorno de un método, indica la validación de datos en el valor de retorno del método. Por ejemplo:

@PostMapping("/user")
@Validated
public String saveUser(@ModelAttribute("user") User user) {
    
    
    // ...
}

En este ejemplo, la anotación @Validated representa la validación de datos en el valor de retorno del método saveUser.

Validador

Un validador es un componente que se utiliza para validar datos en función de su formato o reglas comerciales. En Spring MVC, los validadores se implementan implementando la interfaz Validator.

La interfaz del Validador define dos métodos:

  • admite (Clase <?> clazz): se utiliza para determinar si el validador admite el tipo de datos especificado.
  • validar (Objeto objetivo, Errores errores): se utiliza para validar el objeto de destino y guardar los resultados de la validación en el objeto Errores.

Podemos implementar la interfaz Validator y escribir nuestro propio validador. Por ejemplo, definimos una clase UserValidator para verificar si el objeto Usuario cumple con los requisitos:

@Component
public class UserValidator implements Validator {
    
    
    @Override
    public boolean supports(Class<?> clazz) {
    
    
        return User.class.isAssignableFrom(clazz);
    }

    @Override
    public void validate(Object target, Errors errors) {
    
    
        User user = (User) target;
        if (user.getName() == null || user.getName().isEmpty()) {
    
    
            errors.rejectValue("name", "user.name.required", "Name is required");
        }
        if (user.getAge() != null && user.getAge() < 0) {
    
    
            errors.rejectValue("age", "user.age.invalid", "Age is invalid");
        }
    }
}

En este ejemplo, la clase UserValidator implementa la interfaz Validator y anula los métodos support() y validar(). El método support() se usa para determinar si el validador admite datos de tipo Usuario, y el método validar() se usa para validar el objeto Usuario y guardar los resultados de la validación en el objeto Errores.

Uso de validación de datos.

La validación de datos puede ayudarnos a garantizar la exactitud y confiabilidad de los datos enviados por los usuarios y mejorar la solidez y confiabilidad del sistema. Cuando utilizamos la validación de datos, necesitamos definir un validador para validar los datos enviados por el usuario. Luego podemos habilitar la validación de datos usando la anotación @Valid y usar el objeto BindingResult en el controlador para obtener los resultados de la validación.

Por ejemplo, definimos una clase UserValidator para validar objetos de Usuario:

@Component
public class UserValidator implements Validator {
    
    
    @Override
    public boolean supports(Class<?> clazz) {
    
    
        return User.class.isAssignableFrom(clazz);
    }

    @Override
    public void validate(Object target, Errors errors) {
    
    
        User user = (User) target;
        if (user.getName() == null || user.getName().isEmpty()) {
    
    
            errors.rejectValue("name", "user.name.required", "Name is required");
        }
        if (user.getAge() != null && user.getAge() < 0) {
    
    
            errors.rejectValue("age", "user.age.invalid", "Age is invalid");
        }
    }
}

Luego, use la anotación @Valid en el controlador para habilitar la validación de datos y use el objeto BindingResult para obtener el resultado de la validación:

@PostMapping("/user")
public String saveUser(@Valid @ModelAttribute("user") User user, BindingResult result) {
    
    
    if (result.hasErrors()) {
    
    
        // 处理验证错误
    } else {
    
    
        // 保存用户数据
    }
}

En este ejemplo, la anotación @Valid significa habilitar la función de validación de datos, la anotación @ModelAttribute("usuario") significa vincular los parámetros de solicitud al objeto Usuario y el objeto BindingResult se utiliza para obtener los resultados de la verificación.

Resumir

Este artículo presenta el mecanismo de validación y enlace de datos en Spring MVC. El enlace de datos es el proceso de vincular datos enviados por el usuario a objetos Java, lo que se puede lograr mediante la anotación @ModelAttribute. La validación de datos consiste en verificar los datos enviados por el usuario, lo que se puede lograr utilizando la anotación y el validador @Valid. La vinculación y validación de datos puede ayudarnos a simplificar la escritura de código y mejorar la solidez y confiabilidad del sistema.

Supongo que te gusta

Origin blog.csdn.net/JasonXu94/article/details/131626082
Recomendado
Clasificación