@Valid配置

来源:互联网 发布:成都怎么样知乎 编辑:程序博客网 时间:2024/06/10 22:14

MAVEN项目采用SSM框架

PS:本人纯新手,刚入门,留此博客,主要为今后自己学习或工作中温习,矫正,改进。


1.首先在POM.XML中引入下面两个jar包

   <!-- https://mvnrepository.com/artifact/javax.validation/validation-api -->    <dependency>      <groupId>javax.validation</groupId>      <artifactId>validation-api</artifactId>      <version>2.0.0.Final</version>    </dependency>    <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-validator -->    <dependency>      <groupId>org.hibernate</groupId>      <artifactId>hibernate-validator</artifactId>      <version>5.4.1.Final</version>    </dependency>


2.在springmvc的dispatcher-servlet(本人采用的是默认配置)中引入如下配置

    <!-- 配置数据校验 -->    <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">        <property name="providerClass" value="org.hibernate.validator.HibernateValidator" />    </bean>
当然也可以如下配置,更加灵活:

    <!-- 自定义消息数据源 -->      <bean id="messageSource"          class="org.springframework.context.support.ReloadableResourceBundleMessageSource">          <property name="basename"<span style="font-size:24px;"> value="classpath:messages.properties" </span>/>          <property name="fileEncodings" value="utf-8" />          <property name="cacheSeconds" value="120" />      </bean>      <!-- 配置数据校验 -->      <bean id="validator"          class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">          <property name="providerClass" value="org.hibernate.validator.HibernateValidator" />          <!-- 如果不加默认到 使用classpath下的 ValidationMessages.properties -->          <property name="validationMessageSource" ref="messageSource" />       </bean> 
其中,message.properties中主要是为在校验参数中引入的${X},进行取值。另外,
<!-- 校验数据注解 -->      <mvc:annotation-driven />  
这根据各自业务进行扩展配置


3.写测试表格

import lombok.Data;import org.hibernate.validator.constraints.NotEmpty;/** * Created by Quincy on 2017/9/20. */@Datapublic class AppUserForm {    @NotEmpty(message =  "姓名必填")    private String userName;    @NotEmpty(message = "手机号必填")    private String phone;    @NotEmpty(message = "公司必填")    private String corporateName;    @NotEmpty(message = "密码必填")    private String password;    @NotEmpty(message = "验证码必填")    private String verificationCode;}

其中此处注意引入的包是:
org.hibernate.validator.constraints.NotEmpty

千万别引入
import javax.validation.constraints.*

否则会报出以下异常
No validator could be found for type: java.lang.String.

但具体为什么需要导入hibernate.validator 而不是 javax.validator,本人暂时仍未弄清楚,可能跟SpringMVC中配置的validator下的类有关。


4.最后在Controller层进行@Valid注解的使用

    /**     * 注册     * */    @RequestMapping(value = "/register",method = RequestMethod.POST)    @ResponseBody    public ServerResponse register(@Valid AppUserForm appUserForm, BindingResult bindingResult){        if (bindingResult.hasErrors()){            log.error("【注册用户】参数不正确,appUserForm = {}", appUserForm);            throw new UserException(ResultEnum.PARAM_ERROR.getCode(),bindingResult.getFieldError().getDefaultMessage());        }        return appUserService.register(appUserForm);    }
而此处@Valid 引入的是
import javax.validation.Valid;

注意@Valid 需要紧跟所检测的对象,另外BindingResult 是必不可少的。

通过后面测试,以上配置成功进行了数据校验。








原创粉丝点击