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

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

介绍

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

在这里插入图片描述

准备工作

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

  1. 添加 SpringMVC 和 Hibernate Validator 的依赖

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

<!-- SpringMVC -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.3.8</version>
</dependency>

<!-- Hibernate Validator -->
<dependency>
    <groupId>org.hibernate.validator</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>6.2.0.Final</version>
</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 注解可以使我们更方便地对请求数据进行验证,同时也可以使代码更加简洁和易于维护。在实际开发中,我们可以根据需要选择不同的数据验证方法,以便更好地满足需求。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

2013crazy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值