• 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")
            );
        }
    }
  • 相关阅读:
    ubuntu 12.04 配置iscsi共享及挂载iscsi共享
    python_数据类型
    python_基本操作
    shell习题第5题:批量更改文件后缀名
    shell习题第4题:监控ip地址存活
    shell习题第3题:统计内存大小
    shell习题第2题:统计ip访问量
    shell习题第1题:每日一文件
    IIS网站的应用程序与虚拟目录的区别及应用
    http状态码
  • 原文地址:https://www.cnblogs.com/ixixi/p/11684662.html
Copyright © 2020-2023  润新知