这里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") ); } }