验证类注解
每个注解都能有一个message的参数,@XXX(,message=“XXX”),用来定义错误提示。
注解 | 作用 |
---|---|
@AssertFalse |
验证boolean 对象是否为false |
@AssertTrue |
验证boolean 对象是否为 true |
@DecimalMax |
验证 Number 和 String 对象是否小于等于最大值 |
@DecimalMin |
验证 Number 和 String 对象是否大于等于最小值 |
@Digits |
验证 Number 和 String 的构成是否合法 |
@Past |
验证 Date 和 Calendar 对象是否在当前时间之前 |
@Future |
验证 Date 和 Calendar 对象是否在当前时间之后 |
@Max |
验证 Number 和 String 是否小等于最大值,不存在精度 |
@Min |
验证 Number 和 String 是否da等于最小值,不存在精度 |
NotNull |
验证对象不能为空,用于数字 |
NotEmpty |
验证对象是否为空,用于文本 |
Null |
验证对象为空 |
Pattern |
验证String 是否符合正则表达式规则 |
@Size |
验证对象长度是否在范围之内 |
简化 Controller 参数
原来 BookController 中对 表单进行验证,需要把这些参数都当作方法的参数,如果参数比较多就会显得比较冗余。
@PostMapping("/books")
// 当参数太多时会显得非常冗余
public BookEntity bookEntityInsert(@RequestParam("bookName") String bookName, @RequestParam("bookNum") Integer bookNum){
BookEntity bookEntity = new BookEntity();
bookEntity.setBookName(bookName);
bookEntity,setBookNum(bookNum)l
return bookRepository.save(bookEntity);
}
更简便的方法是直接传入一个对象作为参数
public BookEntity bookEntityInsert(BookEntity bookEntity){
bookEntity.setBookName(bookEntity.getBookName);
bookEntity.setBookNum(bookEntity.getBookNum);
return bookRepository.save(bookEntity);
}
表单验证,过滤含 java 表单
- 使用
@Pattern
注解 BookEntity
@Entity
public class BookEntity{
// 进行如下修改
@Pattern(regexp = "^(((?![j|J][A|a][V|v][A|a]).)*)$", message = "书名中不能含有 java")
private String bookName;
}
- 对含有非法字段的表单进行拦截,修改 BookController
@PostMapping(value = "/books")
public BookEntity BookAdd(BookEntity bookEntity, BindingResult bindingResult){
if(bindResult.hasErrors()){
System.out.println(bindingResult.getFieldError().getDefaultMessage());
return null;
}
}
@Notnull 注解,验证字段的合法性
- 在 BookEntity 中对需要验证的字段进行注解
@Entity
public class BookEntity{
@Id
@GeneratedValue
private Integer id;
@NotNull(message = "金额必传")
private Double money;
}
- 在 BookController 中增加注解
@Valid
如果不在 BookController 中增加@Valid
注解,那么当 money 字段没有传时,就会抛出异常,而不是返回 @NotNull 中定义的 message
@PostMapping(value = "/books")
// @Valid 添加在参数位置,来验证合法性
public Object BookAdd(@Valid BookEntity bookEntity, BindingResult bindingResult){
if (bindingResult.hasErrors()){
return bindingResult.getFieldError().getDefaultMessage();
}
// 当传入的是 BookEntity 对象时,set的代码就可以省略
// bookEntity.setBookName(bookEntity.getBookName());
return bookRepository.save(bookEntity);
}