Bean Validation与Hibernate Validation 后台参数验证

本文介绍了如何在SpringBoot项目中整合HibernateValidator进行数据校验,包括必要的Maven依赖配置、内置约束说明、常见错误解决方案及示例代码。

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

1、与springboot整合添加Maven依赖

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-validation</artifactId>
    </dependency>
    <!-- Web 依赖 - 包含了 hibernate-validator 依赖-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

2、Hibernate Validator 是 Bean Validation 的参考实现 . Hibernate Validator 提供了 JSR 303 规范中所有内置 constraint 的实现,除此之外还有一些附加的 constraint。如果想了解更多有关 Hibernate Validator 的信息,请查看 http://www.hibernate.org/subprojects/validator.html

Bean Validation 中的 constraint

表 1. Bean Validation 中内置的 constraint
表 2. Hibernate Validator 附加的 constraint
——摘自 http://www.ibm.com/developerworks/cn/java/j-lo-jsr303/

3、 No validator错误及解决方法

    javax.validation.UnexpectedTypeException: No validator could be found for type: java.lang.Integer

    使用hibernate validator出现上面的错误, 需要 注意

        @NotNull 和 @NotEmpty  和@NotBlank 区别

        @NotEmpty 用在集合类上面
        @NotBlank 用在String上面
        @NotNull    用在基本类型上

    当@NotEmpty用在Integer类型上时将会出现上面的错误,换成@NotNull问题解决。

    ——摘自http://blog.youkuaiyun.com/dracotianlong/article/details/23181729


4、使用案例

@Id
@GeneratedValue
private Long id;
@NotEmpty(message = "姓名不能为空")
@Size(min = 2, max = 8, message = "姓名长度必须大于 2 且小于 20 字")
private String name;
@NotNull(message = "年龄不能为空")
@Min(value = 0, message = "年龄大于 0")
@Max(value = 300, message = "年龄不大于 300")
private Integer age;
@NotEmpty(message = "出生时间不能为空")
private String birthday;
// 必须不为 null, 大小是 10
@NotNull
@Size(min = 10, max = 10)
private String orderId;
// 必须不为空
@NotEmpty
private String customer;
// 必须是一个电子信箱地址
@Email
private String email;
// 必须不为空
@NotEmpty
private String address;
// 必须不为 null, 必须是下面四个字符串'created', 'paid', 'shipped', 'closed'其中之一
//@Status 是一个定制化的 contraint
@NotNull
@Status
private String status;
// 必须不为 null
@NotNull
private Date createDate;
// 嵌套验证
@Valid
private Product product;


5、Controller返回json处理

@PostMapping(value = "create")
@ResponseBody
public R createUserForm(@Valid User user,BindingResult bindingResult){
    if(bindingResult.hasErrors()){
       //获取错误信息,返回json
        return R.error("请求失败,请重试!");
    }
    return R.ok("请求成功!");
}

6、返回给页面处理

    

    
    
    <label for="user_name" class="col-sm-2 control-label">名称:</label>
    <div class="col-xs-4">
        <!--/*@thymesVar id="name" type="java.lang.String"*/-->
        <input type="text" class="form-control" id="user_name" name="name" th:value="${user.name}" th:field="*{user.name}" />
    </div>
    <label class="col-sm-2 control-label text-danger" th:if="${#fields.hasErrors('user.name')}" th:errors="*{user.name}">姓名有误!</label>
</div>

<div class="form-group">
    <label for="user_age" class="col-sm-2 control-label">年龄:</label>
    <div class="col-xs-4">
        <input type="text" class="form-control" id="user_age" name="age" th:value="${user.age}" th:field="*{user.age}" />
    </div>
    <label class="col-sm-2 control-label text-danger" th:if="${#fields.hasErrors('user.age')}" th:errors="*{user.age}">年龄有误!</label>
</div>



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值