SpringMVC 中的数据验证如何使用 @Valid 注解
介绍
在 Web 应用程序开发中,数据验证是一个非常重要的环节。SpringMVC 提供了多种数据验证方法,其中最常用的是使用 @Valid
注解。本文将介绍如何在 SpringMVC 中使用 @Valid
注解进行数据验证。
准备工作
在开始之前,需要进行一些准备工作:
- 添加 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>
- 配置 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
注解来对 id
、name
和 email
属性进行验证。如果验证失败,会返回注解中定义的错误消息。
创建控制器
在 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
注解可以使我们更方便地对请求数据进行验证,同时也可以使代码更加简洁和易于维护。在实际开发中,我们可以根据需要选择不同的数据验证方法,以便更好地满足需求。