SpringMVC表单验证器

作者: Java技术栈 | 来源:发表于2017-09-30 14:39 被阅读159次

本章讲解SpringMVC中怎么通过注解对表单参数进行验证。

SpringBoot配置

使用springboot,spring-boot-starter-web会自动引入hiberante-validator,validation-api依赖。

WebMvcConfigurerAdapter实现类里面添加验证器及国际化指定资源文件。

@Override
public Validator getValidator() {
    LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean();
    validator.setValidationMessageSource(messageSource());
    return validator;
}

@Bean
public MessageSource messageSource() {
    ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
    messageSource.setBasename("i18n/ValidationMessages");
    messageSource.setDefaultEncoding(StandardCharsets.US_ASCII.name());
    return messageSource;
}

验证器使用

接收参数的表单类:

public class LoginForm {

    @NotNull(message = "{login.loginName.length}")
    @Size(min = 4, max = 20, message = "{login.loginName.length}")
    private String loginName;

    @NotNull(message = "{login.loginPassword.length}")
    @Size(min = 8, max = 20, message = "{login.loginPassword.length}")
    private String loginPassword;

    public String getLoginName() {
        return loginName;
    }

    public void setLoginName(String loginName) {
        this.loginName = loginName;
    }

    public String getLoginPassword() {
        return loginPassword;
    }

    public void setLoginPassword(String loginPassword) {
        this.loginPassword = loginPassword;
    }

}

在要验证的字段上面加入验证注解,更多参考validation-apijar包下的javax.validation.constraints包。

SpringMVC控制器:

@PostMapping(value = "/login")
public String login(@Validated LoginForm form) {
...
}

使用@Validated注解表示该参数需要验证。

国际化

message里面{}引用的是国际化的资源。

添加国际化资源文件:

ValidationMessages.properties
ValidationMessages_zh_CN.properties

需要指定编码为ASCII,不然会乱码。

异常处理

异常全局处理时进行处理:

@ControllerAdvice
public class ExceptionResolver {

    @ExceptionHandler(Throwable.class)
    @ResponseBody
    Object handleEntityException(HttpServletRequest request, Throwable ex) {
        ...
        if (ex instanceof BindException) {
            BindException c = (BindException) ex;
            List<ObjectError> errors = c.getBindingResult().getAllErrors();
            StringBuilder errorMsg = new StringBuilder();
            errors.forEach(x -> errorMsg.append(x.getDefaultMessage()).append(","));
            
        }
        ...
    }

}

或者在验证的类后面加BindingResult,错误信息都会放在该对象里面,而不会抛出异常。如:

@PostMapping(value = "/login")
public String login(@Validated LoginForm form, BindingResult bindingResult) {
...
}

推荐阅读

什么是Spring Boot?
Spring Boot开启的2种方式
Spring Boot Starters启动器
Spring Boot定制启动图案
Spring Boot核心配置
Spring Boot功能实战
Spring Boot自动配置原理、实战
Spring Boot Runner启动器
Spring Boot - Profile不同环境配置

看完有没有收获?分享到朋友圈给更多的人吧。

相关文章

  • SpringMVC表单验证器

    本章讲解SpringMVC中怎么通过注解对表单参数进行验证。 SpringBoot配置 使用springboot,...

  • 第一章 SpringBoot初接触(进阶篇)

    SpringBoot 进阶 标签(空格分隔): springboot java springmvc 表单验证 @V...

  • 验证

    验证 表单请求验证类 必须 使用 表单请求 - FormRequest 类 来处理控制器里的表单验证。 验证类的 ...

  • java springcloud版b2b2c社交电商spring

    这篇文篇主要简述如何在springboot中验证表单信息。在springmvc工程中,需要检查表单信息,表单信息验...

  • SpringBoot教程 | 第十九篇: 验证表单信息

    这篇文篇主要简述如何在springboot中验证表单信息。在springmvc工程中,需要检查表单信息,表单信息验...

  • SpringMVC: @Valid 表单验证

    使用例子 Spring Boot 提供了强大的表单验证功能实现 假设我们有一个 Student 实体类 Dao 接...

  • runoob js第八天

    JavaScript 表单验证 JavaScript 表单验证avaScript 可用来在数据被送往服务器前对 H...

  • Angular表单验证

    angular的表单验证由验证器Validators模块提供,所以如果你的表单需要验证就要将此模块引入 一、想使用...

  • HTTP --- 验证

    在控制器中 验证 请求数据 表单请求验证 其他(Ajax请求验证) 手动验证器(就是在控制器中使用Validaor...

  • springmvc 10 表单与验证

    表单 表单用的是springmvc的form标签 引入springmvc的form标签 在form标签中使用mod...

网友评论

    本文标题:SpringMVC表单验证器

    本文链接:https://www.haomeiwen.com/subject/qnngextx.html