服务器端的数据校验

本文介绍了如何在SpringMVC中利用注解进行服务器端数据校验,包括使用JSR 303标准和Hibernate Validator实现。详细讲述了如何配置依赖、启用注解驱动、定义校验规则、在控制器方法上启用验证,以及处理验证错误信息,并提到了分组校验的概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SpringMVC标签库

SpringMVC提供了两套标签库,用于简化jsp页面编程。一般只使用form标签库,其它所需要的标签可以使用JSTL标签库

<form:form>用于生成一个form表单,并且支持数据回显和报错显示
注意:在使用时必须有对应的model对象
编程使用

<form:form action="abc" modelAttribute="user">
    <table>
        <tr>
            <td><form:label path="username">用户名称:</form:label></td>
            <td><form:input path="username"/><form:errors path="username"/> </td>
        </tr>
    </table>
</form:form>

生成的html页面为

<form id="user" action="abc" method="post">
    <table>
        <tr>
            <td><label for="username">用户名称:</label></td>
            <td><input id="username" name="username" type="text" value="zhangqianduan"/> </td>
        </tr>
    </table>
</form>

<form:label path="username">用于生成label标签

<form:input path="username"/>用于生成单行输入域,<input name="username" type="text"/>

<form:errors path="username"/>用于显示和username输入域相关的报错信息

<form:password path="password"/>用于生成单行密码域,就是<input type="password" name="password"/>

<form:button value="登录系统"/>用于生成按钮 <input type="button" value=""/>
一般不建议使用form标签库中的按钮,按钮定义建议使用html中的按钮

服务器端数据校验

可以使用注解的方式进行服务器端数据校验

JSR 303是Java为Bean数据合法性校验提供的标准框架,它已经包含在JavaEE 6.0 中
JSR 303 通过在 Bean 属性上标注类似于 @NotNull、@Max 等标准的注解指定校验规则,并通过标准的验证接口对 Bean 进行验证
Hibernate Validator 是 JSR 303 的一个参考实现,除支持所有标准的校验注解外,它还支持以下的扩展注解

1、依赖

 <dependency>
            <groupId>org.hibernate.validator</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>7.0.1.Final</version>
        </dependency>

2、打开注解驱动
使用注解的方式定义校验规则

  <mvc:annotation-driven validator="validator"/>
    <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
        <property name="providerClass" value="org.hibernate.validator.HibernateValidator"/>
    </bean>

3、在接收数据的值bean上添加校验规则

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iPvxZPdm-1621415705508)(JSR303规则.png)]

hibernate-validator的补充规则

hibernate-validator
@Data
public class User implements Serializable {
    private Long id;
    @NotBlank(message = "用户名称不能为空")
    @Size(min =6,max = 20,message = "用户名称应该是6到20个字符之间!")
    private String username;

4、在控制器方法参数上使用注解打开验证@Validated【@Valid–JSR303,而@Validated–SpringMVC】

注意:User和Errors必须紧邻,顺序不能调整。也有人使用BindingResult,和Errors一致

 @RequestMapping(value="/add",method = RequestMethod.POST)
public String add(@Validated User user, Errors errors, Model model)throws Exception{//SpringMVC框架能够保证传入数据会自动注入到user对象中
        if(errors.hasErrors()){//判定是否有验证错误
            return "user/add";//返回输入页
        }

5、报错信息显示

<form:errors path="username"/>

6、考虑验证执行顺序

引入分组

public interface UserGroup {
    @GroupSequence({AddFirstGroup.class,AddSecondGroup.class})
    public interface AddGroup{}
    public interface AddFirstGroup{}
    public interface AddSecondGroup{}
}

修改验证规则引入不同分组

public class User implements Serializable {
    private Long id;
    @NotBlank(message = "用户名称不能为空",groups = UserGroup.AddFirstGroup.class)
    @Size(min =6,max = 20,message = "用户名称应该是6到20个字符之间!",groups = UserGroup.AddSecondGroup.class)
    private String username;

修改控制器的注解

    @RequestMapping(value="/add",method = RequestMethod.POST)
    public String add(@Validated(UserGroup.AddGroup.class) User user, Errors errors, Model model)throws Exception{//SpringMVC框架能够保证传入数据会自动注入到user对象中
        if(errors.hasErrors()){//判定是否有验证错误
            return "user/add";//返回输入页
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值