spring boot中使用javax.validation以及org.hibernate.validator校验入参

这里springboot用的版本是:<version>2.1.1.RELEASE</version>

自带了hibernate.validator,所以不用添加额外依赖

1、创建个对应前台form的测试vo,并添加字段校验注解

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import javax.validation.constraints.AssertTrue;
import javax.validation.constraints.DecimalMax;
import javax.validation.constraints.DecimalMin;
import javax.validation.constraints.Digits;
import javax.validation.constraints.Future;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Null;
import javax.validation.constraints.Past;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.NotBlank;
import org.hibernate.validator.constraints.NotEmpty;
import org.hibernate.validator.constraints.Range;
import org.springframework.format.annotation.DateTimeFormat;
import com.fasterxml.jackson.annotation.JsonFormat;
public class TestVO {
//  判断字符串空用这个
    @NotBlank(message="姓名必须输入!")
    private String name;
    @NotBlank
    @Length(min=18,max=19,message="身份证长度必须在18-19之间")
    private String card;
    @NotNull
    @Past(message="日期必须必须是当天之前")
    //@Future
//  前台传递日期字符,自动转换成日期对象
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
//  日期对象输出到前台,自动格式化展示
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    private Date date;
//  判断基本类型空用这个
    @NotNull(message="年龄必须输入!")
    @Max(message="最大年龄28岁!",value=28)
    @Min(message="最小年龄18岁!",value=18)
    private Integer age;
    @NotBlank
//  string,numeric大小判断
    @Range(min=1,max=100,message="weight只能在1-100之间")
//  数组,集合大小判断
//  @Size(max=100, min=1,message="size只能在1-100之间")
    @Digits(integer=3,fraction=2,message="weight只能为数字,整数3位以下,小数保留2位")
    private String weight;
    @NotNull
    @AssertTrue(message="性别只能填男!")
    //@AssertFalse
    private Boolean  sex;
//  判断集合空用这个
    @NotEmpty(message="集合不能为空!")
    List<String> list;
    @Null(message="该字段不能设值!")
    //@NotNull
    private Object tmp;
    @NotBlank
    @Pattern(regexp="^[150[0-9]+]{11}",message="电话格式有问题!")
    private String phone;
    @NotBlank
    @Email(message="email格式不正确!")
    private String email;
    @DecimalMin(value="18",message="dicimal不能小于18!")
    @DecimalMax(value="20",message="dicimal不能大于20!")
    private BigDecimal dicimal;

    //getter..setter..  省略
}

2、创建controller接收参数测试控制层

@RestController
public class TestController {
    @RequestMapping(value="/v")
    public void validateTestVO(@Valid TestVO testVO,BindingResult result) {
        if(result.hasErrors()){
            List<ObjectError> list = result.getAllErrors();
            for(ObjectError error:list){
                System.out.println(error.getCode()+"-"+error.getDefaultMessage());
            }
        }
    }
}

3、创建controller测试类,测试校验

public class ControllerTest {
private MockMvc mockMvc;
    //@Before注解的表示在测试启动的时候优先执行,一般用作资源初始化。
    //这里初始化生成controller类单例
    @Before
    public void setUp()throws Exception{
        mockMvc=MockMvcBuilders.standaloneSetup(new TestController()).build();
    }
@Test
    public void controllerTest()throws Exception{
        mockMvc.perform(MockMvcRequestBuilders.post("/v")
                  .param("age", "28")
//                .param("name", "aaa")
//                .param("list", "[\"bb\",\"cc\"]")
//                .param("card", "123456789012345678")
//                .param("date", "2019-10-01 11:09:11")
//                .param("weight", "99.99")
//                .param("sex", "true")
////                .param("tmp", "")
////                .param("phone", "")
//                .param("dicimal", "18")
//                .param("email", "aaa")
        );
    }
}

原文地址:https://www.cnblogs.com/ixixi/p/11684662.html

时间: 2024-10-09 12:11:42

spring boot中使用javax.validation以及org.hibernate.validator校验入参的相关文章

Spring Boot中Starter是什么

比如我们要在Spring Boot中引入Web MVC的支持时,我们通常会引入这个模块spring-boot-starter-web,而这个模块如果解压包出来会发现里面什么都没有,只定义了一些POM依赖. 经过研究,Starter主要用来简化依赖用的.比如我们之前做MVC时要引入日志组件,那么需要去找到log4j的版本,然后引入,现在有了Starter之后,直接用这个之后,log4j就自动引入了,也不用关心版本这些问题. 部分starters的依赖: Starter(Group ID: org.

Spring Boot 中全局异常处理器

Spring Boot 中全局异常处理器,就是把错误异常统一处理的方法.等价于Springmvc中的异常处理器. 步骤一:基于前面的springBoot入门小demo修改 步骤二:修改HelloController类 修改HelloController,使得访问/hello一定会产生异常: some exception package cn.xdf.springboot.web; import java.text.DateFormat; import java.util.Date; import

spring boot中注册拦截器

拦截器是动态拦截Action调用的对象.它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行,同时也提供了一种可以提取action中可重用部分的方式.在AOP(Aspect-Oriented Programming)中拦截器用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作. 如何在spring boot中添加拦截器? 1.首先自己实现一个拦截器 import org.springframework.web.ser

使用spring boot中的JPA操作数据库

前言 Spring boot中的JPA 使用的同学都会感觉到他的强大,简直就是神器一般,通俗的说,根本不需要你写sql,这就帮你节省了很多时间,那么下面我们来一起来体验下这款神器吧. 一.在pom中添加依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </depen

spring boot 中AOP的使用

一.AOP统一处理请求日志 也谈AOP 1.AOP是一种编程范式 2.与语言无关,是一种程序设计思想 面向切面(AOP)Aspect Oriented Programming 面向对象(OOP)Object Oriented Programming 面向过程(POP) Procedure Oriented Programming 再谈AOP 1.面向过程到面向对象 2.换个角度看世界,换个姿势处理问题 3.将通用逻辑从业务逻辑中分离出来 二.处理过程 个人理解,其实就是日志体系为了方便使用,可以

3.Spring Boot中使用Swagger2构建强大的RESTful API文档

原文:http://www.jianshu.com/p/8033ef83a8ed 由于Spring Boot能够快速开发.便捷部署等特性,相信有很大一部分Spring Boot的用户会用来构建RESTful API.而我们构建RESTful API的目的通常都是由于多终端的原因,这些终端会共用很多底层业务逻辑,因此我们会抽象出这样一层来同时服务于多个移动端或者Web前端. 这样一来,我们的RESTful API就有可能要面对多个开发人员或多个开发团队:IOS开发.Android开发或是Web开发

spring-boot实战【10】【转】:Spring Boot中使用@Async实现异步调用

什么是"异步调用"? "异步调用"对应的是"同步调用",同步调用指程序按照定义顺序依次执行,每一行程序都必须等待上一行程序执行完成之后才能执行:异步调用指程序在顺序执行时,不等待异步调用的语句返回结果就执行后面的程序. 同步调用 下面通过一个简单示例来直观的理解什么是同步调用: 定义Task类,创建三个处理函数分别模拟三个执行任务的操作,操作消耗时间随机取(10秒内) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

spring-boot实战【07】【转】:Spring Boot中Web应用的统一异常处理

我们在做Web应用的时候,请求处理过程中发生错误是非常常见的情况.Spring Boot提供了一个默认的映射:/error,当处理中抛出异常之后,会转到该请求中处理,并且该请求有一个全局的错误页面用来展示异常内容. 选择一个之前实现过的Web应用(Chapter3-1-2)为基础,启动该应用,访问一个不存在的URL,或是修改处理内容,直接抛出异常,如: 1 2 3 4 @RequestMapping("/hello") public String hello() throws Exce

spring-boot实战【09】【转】:Spring Boot中使用@Scheduled创建定时任务

我们在编写Spring Boot应用中经常会遇到这样的场景,比如:我需要定时地发送一些短信.邮件之类的操作,也可能会定时地检查和监控一些标志.参数等. 创建定时任务 在Spring Boot中编写定时任务是非常简单的事,下面通过实例介绍如何在Spring Boot中创建定时任务,实现每过5秒输出一下当前时间. 在Spring Boot的主类中加入@EnableScheduling注解,启用定时任务的配置 1 2 3 4 5 6 7 8 9 10 @SpringBootApplication @E