0
点赞
收藏
分享

微信扫一扫

【java】使用Validate对javaBean进行校验


一、前言

现在写代码,避免不了校验,比如校验字段是否为空呀、校验是否大于某个值呀、校验是否是email格式呀等等。

现在写基本就是if … else …

  • 验证代码繁琐,重复劳动
  • 方法内代码显得冗长
  • 每次要看哪些参数验证是否完整,需要去翻阅验证逻辑代码

二、hibernate validator

基本上所有方法,开始的时候都要进行一下判断,这样重复代码很多。为了优化出更加简洁的代码。我们可以使用org.hibernate.validator ,使用注解来对代码的vo进行校验。

请看下面的demo:

vo:

import lombok.Data;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.NotBlank;

import javax.validation.constraints.NotNull;
import java.io.Serializable;

@Data
public class ModifyVO extends OperatorVO implements Serializable {
    private static final long serialVersionUID = -4653702540447208894L;

    @NotNull(message = "007,id不能为空")
    private Integer id;

  
    @NotBlank(message = "007,字段名称不能为空")
    @Length(min = 1, max = 50, message = "最多支持输入50个字")
    private String tagName;
  
    @NotNull(message = "007,创建方式不能为空")
    private Integer tagRule;
    }

modify 方法:

import javax.validation.Valid;

  @PostMapping(value = "/v100/modify")
    public BusiSystemResponse<Boolean> modify(@RequestBody  @Valid ModifyVO vo) {
        BusiSystemResponse<Boolean> response = new BusiSystemResponse<>();
        if (result.hasErrors()) {
            for (ObjectError error : result.getAllErrors()) {
                logger.warn(error.getDefaultMessage());
            }
            response.setData(null);
            response.setMsg(result.getAllErrors().get(0).getDefaultMessage());
            response.setSingleStatus(CommonResponseCodeEnum.PARAM_ERROR.getCode());
            return response;
        }
        return response;
    }

三、详细的注解介绍

@Data
public class Demo2 {
    @Length(min = 5, max = 17, message = "length长度在[5,17]之间")
    private String length;

    /**@Size不能验证Integer,适用于String, Collection, Map and arrays*/
    @Size(min = 1, max = 3, message = "size在[1,3]之间")
    private String age;

    @Range(min = 150, max = 250, message = "range在[150,250]之间")
    private int high;

    @Size(min = 3,max = 5,message = "list的Size在[3,5]")
    private List<String> list;
}

对象级联校验

对象内部包含另一个对象作为属性,属性上加@Valid,可以验证作为属性的对象内部的验证:(验证Demo2示例时,可以验证Demo2的字段)

@Data
public class Demo2 {
    @Size(min = 3,max = 5,message = "list的Size在[3,5]")
    private List<String> list;

    @NotNull
    @Valid
    private Demo3 demo3;
}

@Data
public class Demo3 {
    @Length(min = 5, max = 17, message = "length长度在[5,17]之间")
    private String extField;
}

举报

相关推荐

0 条评论