springBoot startup:表单验证(五)

验证类注解

每个注解都能有一个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 表单

  1. 使用 @Pattern 注解 BookEntity
@Entity
public class BookEntity{
    // 进行如下修改
    @Pattern(regexp = "^(((?![j|J][A|a][V|v][A|a]).)*)$", message = "书名中不能含有 java")
    private String bookName;
}
  1. 对含有非法字段的表单进行拦截,修改 BookController
@PostMapping(value = "/books")
public BookEntity BookAdd(BookEntity bookEntity, BindingResult bindingResult){
    if(bindResult.hasErrors()){
          System.out.println(bindingResult.getFieldError().getDefaultMessage());
    return null;
  }
}

@Notnull 注解,验证字段的合法性

  1. 在 BookEntity 中对需要验证的字段进行注解
@Entity
public class BookEntity{
    @Id
    @GeneratedValue
    private Integer id;

    @NotNull(message = "金额必传")
    private Double money;
}
  1. 在 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);
}

你可能感兴趣的:(springBoot startup:表单验证(五))