hibernate-validator后端校验

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;
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_33235279/article/details/130347381