hibernate-validator后端校验

文章介绍了在SpringBoot项目中进行数据验证的方法,包括引入依赖、使用常见注解如@NotBlank和@NotNull进行字段校验,以及如何设置全局异常处理来捕获BindException。此外,文章还展示了如何自定义校验注解以确保属性值为0或1的布尔数值。
摘要由CSDN通过智能技术生成

1、安装依赖

<!--        校验-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>

校验失败会抛出异常org.springframework.validation.BindException

2、常用注解

3、全局校验异常处理

    @ExceptionHandler(BindException.class)
    @ResponseBody
    @ResponseStatus(code= HttpStatus.BAD_REQUEST)
    public ErrorVo handleBindException(HttpServletRequest req, BindException e) {
        e.printStackTrace();
        String reqUrl = req.getRequestURI();
        String method = req.getMethod();
        String msg = StringUtils.collectionToDelimitedString(
                e.getAllErrors()
                        .stream()
                        .map(err -> err.getDefaultMessage())
                        .collect(Collectors.toList()),",");
        return Vos.error(ResultCode.ARGUMENTS_ERROR.getCode(),msg,method + " " + reqUrl);
    }

4、使用方式

Controller中加@Valid

    @ApiOperation("保存一条数据")
    @PostMapping("/save")
    public JsonVo save(@RequestBody
                       @Valid ReqVo vo) {
        Po entity = reqVo2Po(vo);
        if(getService().saveOrUpdate(entity)){
            return Vos.ok();
        } else{
            throw new ArgumentsException(ResultCode.ARGUMENTS_ERROR);
        }
    }

在Vo中添加对应注解

package com.example.jiakao.pojo.vo.req.save;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;

@Data
@ApiModel("保存考场信息的参数")
public class ExamPlaceReqVo {
    @ApiModelProperty(value = "考场id")
    private Long id;
    @ApiModelProperty(value = "考场名称", required = true)
    @NotBlank(message = "名称不能为空")
    private String name;
    @ApiModelProperty(value = "考场所属城市id", required = true)
    @NotNull(message = "所属城市不能为空")
    private Integer parentId;
}

结果如下

5、自定义校验注解

package com.example.jiakao.common.validator;

import javax.validation.Constraint;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import javax.validation.Payload;
import java.lang.annotation.*;

//校验属性是不是0或1 => 布尔数值
@Documented
@Retention(RetentionPolicy.RUNTIME)
// FIELD用在属性上,TYPE用在类上,METHOD用在方法上
@Target(ElementType.FIELD)
@Constraint(validatedBy = BoolNumber.BoolNumberValidator.class)
public @interface BoolNumber {
    String message() default "值应为0或1";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};

    class BoolNumberValidator implements ConstraintValidator<BoolNumber, Short> {
        @Override
        public boolean isValid(Short num, ConstraintValidatorContext constraintValidatorContext) {
            return num == null || num == 0 || num == 1;
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值