SpringMVC 中的数据验证如何使用 @Valid 注解

SpringMVC 中的数据验证如何使用 @Valid 注解

介绍

在 Web 应用程序开发中,数据验证是一个非常重要的环节。SpringMVC 提供了多种数据验证方法,其中最常用的是使用 @Valid 注解。本文将介绍如何在 SpringMVC 中使用 @Valid 注解进行数据验证。

准备工作

在开始之前,需要进行一些准备工作:

  1. 添加 SpringMVC 和 Hibernate Validator 的依赖

pom.xml 文件中添加以下依赖:


<dependency>
    <groupId>org.springframeworkgroupId>
    <artifactId>spring-webmvcartifactId>
    <version>5.3.8version>
dependency>


<dependency>
    <groupId>org.hibernate.validatorgroupId>
    <artifactId>hibernate-validatorartifactId>
    <version>6.2.0.Finalversion>
dependency>
  1. 配置 SpringMVC

在 SpringMVC 的配置文件中添加以下配置:


<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>


<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="basename" value="/WEB-INF/messages/messages"/>
    <property name="defaultEncoding" value="UTF-8"/>
bean>


<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"/>

<bean id="requestMappingHandlerAdapter" class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
    <property name="messageConverters">
        <list>
            <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                <property name="supportedMediaTypes">
                    <list>
                        <bean class="org.springframework.http.MediaType">
                            <constructor-arg value="text"/>
                            <constructor-arg value="plain"/>
                            <constructor-arg value="UTF-8"/>
                        bean>
                    list>
                property>
            bean>
            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
                <property name="supportedMediaTypes">
                    <list>
                        <bean class="org.springframework.http.MediaType">
                            <constructor-arg value="application"/>
                            <constructor-arg value="json"/>
                            <constructor-arg value="UTF-8"/>
                        bean>
                    list>
                property>
            bean>
        list>
    property>
    <property name="webBindingInitializer">
        <bean class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer">
            <property name="conversionService" ref="conversionService"/>
            <property name="validator" ref="validator"/>
        bean>
    property>
bean>

在上面的配置中,我们使用了 LocalValidatorFactoryBean 类来配置数据验证器,并使用 ReloadableResourceBundleMessageSource 类来配置消息源。我们还配置了数据绑定和消息转换器。

创建模型类

src/main/java 目录下创建一个名为 User 的模型类,内容如下:

public class User {

    @NotNull(message = "ID 不能为空")
    private Integer id;

    @NotBlank(message = "用户名不能为空")
    private String name;

    @Email(message = "Email 格式不正确")
    private String email;

    // 省略 getter 和 setter 方法
}

在上面的代码中,我们使用了 @NotNull@NotBlank@Email 注解来对 idnameemail 属性进行验证。如果验证失败,会返回注解中定义的错误消息。

创建控制器

src/main/java 目录下创建一个名为 UserController 的控制器,内容如下:

@Controller
public class UserController {

    @PostMapping("/user")
    @ResponseBody
    public String createUser(@Valid @RequestBody User user, BindingResult bindingResult) {
        if (bindingResult.hasErrors()) {
            StringBuilder stringBuilder = new StringBuilder();
            for (ObjectError error : bindingResult.getAllErrors()) {
                stringBuilder.append(error.getDefaultMessage()).append("\n");
            }
            return stringBuilder.toString();
        } else {
            return "User created successfully";
        }
    }

}

在上面的代码中,我们使用了 @Valid 注解来对 User 对象进行验证,并使用BindingResult 类来获取验证结果。如果验证失败,我们将返回错误消息;否则,我们将返回成功消息。

测试数据验证

现在,我们可以启动应用程序并使用 POST 请求发送数据来测试数据验证功能。使用 Postman 或其他工具,发送以下 JSON 数据:

{
    "id": null,
    "name": "",
    "email": "invalid-email"
}

如果一切正常,我们应该会收到以下错误消息:

ID 不能为空
用户名不能为空
Email 格式不正确

总结

在本文中,我们介绍了如何在 SpringMVC 中使用 @Valid 注解进行数据验证。首先,我们添加了 SpringMVC 和 Hibernate Validator 的依赖,并配置了数据验证器和消息源。然后,我们创建了一个模型类,使用注解来对属性进行验证。最后,我们创建了一个控制器,使用 @Valid 注解来验证请求数据,并使用 BindingResult 类来获取验证结果。

使用 @Valid 注解可以使我们更方便地对请求数据进行验证,同时也可以使代码更加简洁和易于维护。在实际开发中,我们可以根据需要选择不同的数据验证方法,以便更好地满足需求。

你可能感兴趣的:(Java,教程,java,数据库,开发语言)