@Valid配置

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.
 */
@Data
public 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 是必不可少的。

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








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值