Spring 校验(validator,JSR-303)简单实现

2023年6月2日08:05:11

Spring 校验(validator,JSR-303)简单实现

利用Spring MVC 与 hibernate的JSR-303规范结合实现后台校验(简单案例):

  • 什么是JSR-303规范
  • 与Spring MVC结合
  • 实体类添加验证注解
  • *控制器验证注解添加

什么是JSR-303规范

JSR 303是Java EE 6中的一项子规范,叫做Bean Validation,官方参考实现是hibernate Validator,此实现与Hibernate ORM没有任何关系。JSR 303用于对Java Bean中的字段的值进行验证。

与Spring MVC结合

Spring-mvc.xml配置:

    <!--JSR-303-->
    <mvc:annotation-driven validator="validator"/>

    <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
        <property name="providerClass" value="org.hibernate.validator.HibernateValidator"/>
        <property name="validationMessageSource" ref="messageSource"/>
    </bean>
    <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
        <property name="basename" value="validatemessage"/>
        <property name="useCodeAsDefaultMessage" value="false"/>
        <property name="defaultEncoding" value="UTF-8"/>
        <property name="cacheSeconds" value="60"/>
    </bean>
    <bean  id="webBindingInitializer" class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer">
        <property name="conversionService">
            <bean class="org.springframework.format.support.FormattingConversionServiceFactoryBean"></bean>
        </property>
        <property name="validator" ref="validator"/>
    </bean>

实体类添加验证注解

这里贴出部分代码,知道如何加注解即可:


import com.lemontree.common.utils.AjaxResult;
import com.lemontree.common.utils.StringUtil;
import com.lemontree.common.utils.email.EmailUtils;
import org.hibernate.validator.constraints.NotEmpty;

import java.util.Date;

public class User {
    /**
     * This field was generated by MyBatis Generator.
     * This field corresponds to the database column user.id
     *
     * @mbg.generated Thu Mar 16 13:27:38 CST 2017
     */
    private Integer id;

    /**
     * This field was generated by MyBatis Generator.
     * This field corresponds to the database column user.user_name
     *
     * @mbg.generated Thu Mar 16 13:27:38 CST 2017
     */
    @NotEmpty(message = "用户名不能为空")
    private String userName;

    /**
     * This field was generated by MyBatis Generator.
     * This field corresponds to the database column user.password
     *
     * @mbg.generated Thu Mar 16 13:27:38 CST 2017
     */
    @NotEmpty(message = "密码不能为空")
    private String password;
    }

控制器验证注解添加

将@Validated 注解跟在实体类前面,BindingResult紧跟其后:

    @RequestMapping(value = "/login.htm", method = RequestMethod.POST)
    public @ResponseBody AjaxResult login(@Validated User user, BindingResult bindingResult,
                                          HttpServletRequest request, HttpServletResponse response) {
        if (bindingResult.hasErrors()){
            List<FieldError> errorses = bindingResult.getFieldErrors();
            if (CollectionUtils.isNotEmpty(errorses)){
                errorses.forEach(item->{
                    System.out.println(item.getDefaultMessage());
                });
            }
        }
      }

  • 作者:lemontree1993
  • 原文链接:https://blog.csdn.net/u012188107/article/details/72770854
    更新时间:2023年6月2日08:05:11 ,共 2479 字。