spring 项目中使用 hibernate validator验证输入参数

1 hibernate validator 官方文档:https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/

在 springboot 项目中 spring-boot-starter-web 已经包含了 hibernate-validator 可以直接使用。否则需要在 maven 依赖中添加依赖项。

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

2 对请求的参数进行校验

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.List;

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class RequestParamBase {
    @NotBlank(message = "name 不能为空")
    private String name;

    @NotEmpty(message = "fruits 不能为空")
    @Valid
    private List<Fruit> fruits;

}

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;

@AllArgsConstructor
@NoArgsConstructor
@Data
public class Fruit {
    @NotBlank(message = "color 不能为空")
    private String color;
    @NotNull(message = "price 不能为空")
    private Integer price;
}

说明:对于对象级联验证,需要在对象字段上添加 @Valid 标记。

3 在 controller 方法上使用验证

import org.springframework.validation.BindingResult;import org.springframework.validation.ObjectError;import org.springframework.web.bind.annotation.RequestBody;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RestController;import javax.validation.Valid;

@RequestMapping(value = "/student/1", method = RequestMethod.POST)
    public Response getStudent(@RequestBody @Valid RequestParamBase paramBase, BindingResult validResult) {
        if (validResult.hasErrors()) {
            for(ObjectError error : validResult.getAllErrors()) {
                System.out.println(error.getDefaultMessage());
            }
            return null;
        }
        System.out.println(paramBase);
        Response result = Response.builder().age(23).name("well").build();
        return result;
    }

此时会发现会对所有字段验证,如果想验证出第一条问题赶快退出,就需要添加配置。

通常按顺序验证到第一个字段不符合验证要求时,就可以直接拒绝请求了。Hibernate Validator有以下两种验证模式:

1、普通模式(默认是这个模式)

  普通模式(会校验完所有的属性,然后返回所有的验证失败信息)

2、快速失败返回模式

  快速失败返回模式(只要有一个验证失败,则返回)

4 配置快速失败

failFast:true  快速失败返回模式    false 普通模式

ValidatorFactory validatorFactory = Validation.byProvider( HibernateValidator.class )        .configure()        .failFast( true )        .buildValidatorFactory();Validator validator = validatorFactory.getValidator();

和 (hibernate.validator.fail_fast:true  快速失败返回模式    false 普通模式)


ValidatorFactory validatorFactory = Validation.byProvider( HibernateValidator.class )        .configure()        .addProperty( "hibernate.validator.fail_fast", "true" )        .buildValidatorFactory();Validator validator = validatorFactory.getValidator();
在 springboot 项目中配置
import org.hibernate.validator.HibernateValidator;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;

@Configuration
public class ValidConfig {

    @Bean
    public Validator validator() {
        ValidatorFactory validatorFactory = Validation.byProvider(HibernateValidator.class)
                .configure()
                .addProperty("hibernate.validator.fail_fast", "true")
                .buildValidatorFactory();
        Validator validator = validatorFactory.getValidator();
        return validator;
    }
}

5 如果在 controller 中有多个入参,可以按照以下方式进行配置

public void test()(@RequestBody @Valid DemoModel demo, BindingResult result,@RequestBody @Valid DemoModel demo2, BindingResult result2)

参考文献:https://www.cnblogs.com/mr-yang-localhost/p/7812038.html



原文地址:https://www.cnblogs.com/zhaopengcheng/p/9963996.html

时间: 2024-10-27 17:33:55

spring 项目中使用 hibernate validator验证输入参数的相关文章

非WEB项目中引入Hibernate Validator

前言: 网上一些朋友分享了关于hibernate-validator的使用方法,但是不是缺少关联库信息,就是提供的参考代码中缺少自定类. 希望我这一篇博客能够让你顺利的跑出预期的结果. 如果有错,可以给我留言. 英文好的朋友可以参考官网的getting started. http://hibernate.org/validator/documentation/getting-started/ 一.环境 hibernate-validator库必须运行的JDK版本为1.6及以上. 二.hibern

Hibernate Validator验证框架中@NotEmpty、@NotBlank、@NotNull 的区别

Hibernate Validator验证框架中@NotEmpty.@NotBlank.@NotNull的主要使用情况 @NotEmpty  用在集合类上面 @NotBlank   用在String上面 @NotNull     用在基本类型上 原文地址:https://www.cnblogs.com/zhaofeng555/p/9184368.html

java web项目(spring项目)中集成webservice ,实现对外开放接口

什么是WebService?webService小示例 点此了解 下面进入正题: Javaweb项目(spring项目)中集成webservice ,实现对外开放接口步骤: 准备: 采用与spring兼容性较好的cxf来实现 cxf 的  jar下载地址: http://cxf.apache.org/download.html 选择zip格式下载,解压后的lib目录下的jar 需要最少的jar如下: cxf-2.3.3.jargeronimo-annotation_1.0_spec-1.1.1.

使用junit4测试spring项目中service方法

使用junit4测试项目中service方法 1 import java.util.HashMap; 2 import java.util.List; 3 import java.util.Map; 4 5 import javax.annotation.Resource; 6 7 import org.junit.Test; 8 import org.junit.runner.RunWith; 9 import org.springframework.test.context.ContextC

在spring项目中,普通类注入获取Bean,实现ApplicationContextAware接口

在平时spring项目中,某个不能注入Bean的项目中要获取Bean. @Component public class SpringUtil implements ApplicationContextAware { private static ApplicationContext applicationContext = null; public SpringUtil() { } public void setApplicationContext(ApplicationContext arg0

SpringMVC使用Hibernate Validator验证用户输入

一 简介 SpringMVC支持与JSR 349 Bean Validation API的集成.借助于Bean验证,可以非常容易地将验证元数据应用到实体类,并且通过合适的视图向用户展示可能的错误结果.在模型类中可以通过注解对属性验证进行定义,常见的注解有:@Size ,@Email ,@Pattern,@Max等,分别验证长度,邮箱格式,自定义正则表达式,最大值(PS:更多相关注解可以百度或者查API) 二 测试实例 (1)新建一个动态Java web项目,然后下载"Hibernate Vali

spring MVC 使用 hibernate validator验证框架,国际化配置

spring mvc使用hibernate validator框架可以实现的功能: 1. 注解java bean声明校验规则. 2. 添加message错误信息源实现国际化配置. 3. 结合spring form中的errors标签展现错误信息. 优势: 代码简洁. 实现: 1. 使用hibernate validator 至少要引入两个jar包: hibernate-validator-5.3.4.Final.jar , validation-api-1.1.0.Final.jar 2. JS

DotNet项目中的一些常用验证操作

在项目中需要对用户输入的信息,以及一些方法生成的结果进行验证,一般在项目中较多的采用js插件或js来进行有关信息的校验,但是从项目安全性的角度进行考虑,可对系统进行js注入. 如果在后台对用户输入的信息进行验证会相对的安全,在出现信息验证不合法时,可以直接在程序中抛出异常,终止程序的运行. 现在提供几种较为常用的验证方法,可以减少在项目中开发时间和错误性: 1.判断域名:         /// <summary>         /// 普通的域名         /// </summ

Spring Validation(使用Hibernate Validator)

1.需要的jar包 hibernate-validator.5.1.3.Final.jar validation-api.1.1.0.Final.jar 2.springsevlet-config.xml配置 在spring3之后,任何支持JSR303的validator(如Hibernate Validator)都可以通过简单配置引入,只需要在配置xml中加入,这时validatemessage的属性文件默认为classpath下的ValidationMessages.properties: