Spring MVC 数据校验@Valid

先看看几个关键词 @Valid @Pattern @NotNull @NotBlank @Size BindingResult 这些就是Spring MVC的数据校验的几个注解。 那怎么用呢?往下看

1.先在pom.xml文件中加入依赖

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

 2.写controller层

@Controller
@RequestMapping("/user")
public class UserController extends BaseController{
    @RequestMapping("/index")
    public String index() {
        return "index";
    }

    @RequestMapping("/toAddUser")
    public String toAddUserPage() {
        return "addUser";
    }

    /**
     * form表单添加用户,并用注解形式校验
     * @Valid 表示 userModel要进行校验
     * BindingResult 表示绑定校验的错误信息返回
     * @param userModel
     * @param bindingResult
     * @return
     */
    @RequestMapping("/add")
    public String addUser(@Valid @ModelAttribute("userModel") UserModel userModel, BindingResult bindingResult, Model model) {

        if (bindingResult.hasErrors()) {
            FieldError fieldError = bindingResult.getFieldError();
            String validMess = fieldError.getDefaultMessage();
            model.addAttribute("errors", validMess);
            return "error";
        }
        System.out.println("用户姓名:" + userModel.getName());
        System.out.println("用户邮箱:" + userModel.getEmail());
        //用重定向防止页面刷新重复提交
        return "redirect: /user/index";
    }
}

3、看看UserModel.java

public class UserModel {
    private Integer id;

//    @NotNull(message = "姓名不能为空")
    @NotBlank(message = "{username.not.empty}")
//    @Size(min = 3, max = 10, message = "please input right length")
    private String name;
    private Integer age;
    private String gender;
    @Pattern(regexp = "^[A-Za-z\d]+([-_.][A-Za-z\d]+)*@([A-Za-z\d]+[-.])+[A-Za-z\d]{2,4}$",
            message = "{username.not.empty}")
    private String email;
    @NotNull
    private String phone;

    setters... getters....
}

4、在spring 的配置文件中添加配置信息 applicationContext.xml

<!--JSR-303 @Valid 国际化支持配置 -->
<mvc:annotation-driven validator="validator" conversion-service="conversion-service" />
<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>
<bean id="messageSource"
      class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="basename" value="classpath:valid-message-zh" />
    <property name="fileEncodings" value="utf-8"/>
    <property name="cacheSeconds" value="120"/>
</bean>
<bean id="conversion-service" class="org.springframework.format.support.FormattingConversionServiceFactoryBean" />

5、别忘记配置文件中的 valid-message-zh.properties哦

username.not.empty=u7528u6237u540du4e0du80fdu4e3au7a7a

参考:

[1] 《Spring实战》,人民邮电出版社, Craig Walls

原文地址:https://www.cnblogs.com/happyflyingpig/p/8022881.html