SpringFramework是SpringBoot的基石,所以在SpringBoot中使用validator进行验证,实际使用的是SpringFramework中的bean验证特性。而在SpringFramework中集成的是实现了JSR-303标准的Hibernate验证框架,所以我们使用的大多数与验证相关的注解都是Hibernate验证框架实现的。
1.基础类型及其包装类校验
-
在类上使用
@Validated
,方法的形参和返回参数上的约束将会生效@RestController @Validated public class ValidationTestWebBeanController { /** * 基础类型以及其包装类约束 * @param hair * @return */ @PostMapping("/testValidatedAnnotation") public @Length(min = 1,max =10 ) String testValidatedAnnotation( @RequestParam @Range(min = 20,max = 1000000) Long hair){ return "joey:"+hair; } }
-
测试方法如下,可见传入了hair数量低于最小量,抛出了一个预期内的错误
@RunWith(SpringRunner.class) @SpringBootTest @AutoConfigureMockMvc public class ValidationTestWebBeanControllerTest { @Autowired private MockMvc mockMvc; @Test public void testValidatedAnnotation() { try { mockMvc.perform(post("/testValidatedAnnotation").param("hair", "10").contentType(MediaType.APPLICATION_FORM_URLENCODED_VALUE)); } catch (Exception e) { Assert.assertThat(e.getMessage(), containsString("ConstraintViolationException")); } } }
2.集合类的约束
-
对集合进行校验和常规校验相同:
@RestController @Validated public class ValidationTestWebBeanController { /** * 集合约束 * @param words * @return */ @PostMapping("/testValidatedCollection") public String testValidatedCollection(@RequestBody @Size(min = 2) @NotEmpty List< @Length(max = 4) String> words){ return StringUtils.join(words);