后端参数校验

1.建一个springboot项目

2.导入相应的jar包

  
        
            org.hibernate
            hibernate-validator
            6.0.1.Final
        
        
            org.glassfish
            jakarta.el
            3.0.3
        

pojo类中定义参数


/**
 * @author 小乌龟
 */
@Data
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="保存Article对象", description="文章删除状态 0 表示为删除 1 表示已经删除")
public class SaveArticleVO {
    //    @NotNull 限制传入的值不为null。作用在int,Integer等数值类型上时,在限制不为null的同时也不能为空字符串。作用在String上时,限制不为null但是可以为空字符串。作用在类上时,限制不为null。
    //    @NotEmpty 作用于String类型,限制不能为null,且长度不为0,可以是空格字符串。
    //    @NotBlank 作用于String类型,限制不能为null,且去掉空格,即trim之后,长度不为0。
    //    @Max 作用于数值类型,限制最大值(包含该最大值)
    //    @Min 作用于数值类型,限制最小值(包含该最小值)
    //    @Email 作用于String类型,验证是否符合email格式

    private static final long serialVersionUID = 1L;



    @NotBlank(message = "文章标题不能为空")
    @ApiModelProperty(value = "文章标题")
    private String article_name;

    @NotBlank(message = "文章内容不能为空")
    @ApiModelProperty(value = "文章内容")
    private String article_content;

    @NotBlank(message = "文章简介不能为空")
    @ApiModelProperty(value = "文章简介")
    private String synopsis;
    
   public static Article saveArticleVO(SaveArticleVO article){
        Article article1 = new Article();
        article1.setArticle_name(article.getArticle_name());
        article1.setArticle_content(article.getArticle_content());
        article1.setSynopsis(article.getSynopsis());
        return  article1;
    }


}

第一种方法 controller 中使用参数校验

/**
 * @author 小乌龟
 */
@RestController
@RequestMapping("/article")
@Api(tags = {"文章"})
@Validated //对本类中的方法 开启验证功能
public class ArticleController extends BaseController{
    @Autowired
    private IArticleService iArticleService;

    @PostMapping("/add")
    @ApiOperation("添加文章")
    public Results saveArticle(@Valid /*校验后面的参数 */ SaveArticleRo article) {
        return iArticleService.saveArticle(article);
    }
}

第二种方法 在service中使用

(推荐 controller层中可能接收的不仅仅是前端传来的数据 还可以是别的接口数据 比如 微信支付接口 调回数据 所以可以在service中处理全部的数据)

接口:

    /**
      *保存文章
      * @param article
      * @return Results
      * @author zhangjunrong
      * @date 2022/1/28 17:17
      */
    Results saveArticle(@Valid SaveArticleVO article);

类:

后端参数校验_第1张图片

list验证:

后端参数校验_第2张图片 

分组验证: 

后端参数校验_第3张图片

后端参数校验_第4张图片 

bean 参数之间 关联  关系 controller举例

后端参数校验_第5张图片

后端参数校验_第6张图片 

 

后端参数校验_第7张图片

后端参数校验_第8张图片

 官网后端参数校验_第9张图片

package org.hibernate.validator.referenceguide.chapter05.groupsequenceprovider;

public class RentalCarGroupSequenceProvider
        implements DefaultGroupSequenceProvider {

    @Override
    public List> getValidationGroups(RentalCar car) {
        List> defaultGroupSequence = new ArrayList>();
        defaultGroupSequence.add( RentalCar.class );

        if ( car != null && !car.isRented() ) {
            defaultGroupSequence.add( CarChecks.class );
        }

        return defaultGroupSequence;
    }
}

 

package org.hibernate.validator.referenceguide.chapter05.groupsequenceprovider;

@GroupSequenceProvider(RentalCarGroupSequenceProvider.class)//核心
public class RentalCar extends Car {

    @AssertFalse(message = "The car is currently rented out", groups = RentalChecks.class)
    private boolean rented;

    public RentalCar(String manufacturer, String licencePlate, int seatCount) {
        super( manufacturer, licencePlate, seatCount );
    }

    public boolean isRented() {
        return rented;
    }

    public void setRented(boolean rented) {
        this.rented = rented;
    }
}

常用校验注解

@Null 只能是null
@NotNull 不能为null 注意用在基本类型上无效,基本类型有默认初始值
@AssertFalse 必须为false
@AssertTrue 必须是true

字符串/数组/集合检查:(字符串本身就是个数组)
@Pattern(regexp="reg") 验证字符串满足正则
@Size(max, min) 验证字符串、数组、集合长度范围
@NotEmpty 验证字符串不为空或者null
@NotBlank 验证字符串不为null或者trim()后不为空

数值检查:同时能验证一个字符串是否是满足限制的数字的字符串
@Max 规定值得上限int
@Min 规定值得下限
@DecimalMax("10.8") 以传入字符串构建一个BigDecimal,规定值要小于这个值 
@DecimalMin 可以用来限制浮点数大小
@Digits(int1, int2) 限制一个小数,整数精度小于int1;小数部分精度小于int2
@Digits 无参数,验证字符串是否合法
@Range(min=long1,max=long2) 检查数字是否在范围之间
这些都包括边界值

日期检查:Date/Calendar
@Post 限定一个日期,日期必须是过去的日期
@Future 限定一个日期,日期必须是未来的日期

其他验证:
@Vaild 递归验证,用于对象、数组和集合,会对对象的元素、数组的元素进行一一校验
@Email 用于验证一个字符串是否是一个合法的右键地址,空字符串或null算验证通过
@URL(protocol=,host=,port=,regexp=,flags=) 用于校验一个字符串是否是合法URl

 

你可能感兴趣的:(后端,java,spring,boot)