springboot使用validation校检参数 返回错误枚举

引入相关依赖:

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

常用的约束注解:

@Null 被注释的元素必须为 null
@NotNull 被注释的元素必须不为 null
@AssertTrue 被注释的元素必须为 true
@AssertFalse 被注释的元素必须为 false
@Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@DecimalMin(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@DecimalMax(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@Size(max=, min=) 被注释的元素的大小必须在指定的范围内
@Digits (integer, fraction) 被注释的元素必须是一个数字,其值必须在可接受的范围内
@Past 被注释的元素必须是一个过去的日期
@Future 被注释的元素必须是一个将来的日期
@Pattern(regex=,flag=) 被注释的元素必须符合指定的正则表达式
Hibernate Validator 附加的 constraint
@NotBlank(message =) 验证字符串非null,且长度必须大于0
@Email 被注释的元素必须是电子邮箱地址
@Length(min=,max=) 被注释的字符串的大小必须在指定的范围内
@NotEmpty 被注释的字符串的必须非空
@Range(min=,max=,message=) 被注释的元素必须在合适的范围内
@URL(protocol=,host=, port=, regexp=, flags=) 被注释的字符串必须是一个有效的url
@CreditCardNumber 被注释的字符串必须通过Luhn校验算法,银行卡,信用卡等号码一般都用Luhn计算合法性
@ScriptAssert(lang=, script=, alias=) 要有Java Scripting API 即JSR 223 (“Scripting for the JavaTM Platform”)的实现
@SafeHtml(whitelistType=, additionalTags=) classpath中要有jsoup包

pojo:

@Data
public class UserInfo {
    
    
	//主键ID
    @Pattern(regexp = "^[A-Za-z0-9]{34}$", message = "ERROR_UID")
    private String uid;
    //性别0女1男
    @Pattern(regexp = "[0|1]", message = "ERROR_SEX")
    private String sex;
	//用户名
    @NotNull(message = "PARAM_NULL")
    private String userName;
    }

controller:

    @GetMapping(value = "test")
    public void h(@Validated @RequestBody UserInfo userInfo){
    
    
        System.out.println(userInfo);
    }

Exception:

 //MethodArgumentNotValidException处理
            else if (ex instanceof MethodArgumentNotValidException) {
    
    
                MethodArgumentNotValidException e = (MethodArgumentNotValidException) ex;
                //获取抛出的异常信息
                String msg = Objects.requireNonNull(e.getBindingResult().getFieldError()).getDefaultMessage();
                //根据信息获取对应枚举
                ResultEnum resultEnum = ResultEnum.valueOf(msg);
                resultVO = new ResultVO<ResultEnum>(ConvertUtil.Obj2int(resultEnum.getCode(), resultEnum.getCode()), resultEnum.getMessage());
                return resultVO;
            }

ResultEnum:

public enum ResultEnum {
    
    
    SUCCESS (1, "成功"),
    ERROR_UID(-12901, "参数UID不合法,应为34位字符串"),
    ERROR_SEX(-12902,"性别只能为0或者1"),
    PARAM_NULL(-12903,"有必填参数为空,请检查"),
    ;
    private final Integer code;
    private final String message;
    ResultEnum(Integer code, String message) {
    
    
        this.code = code;
        this.message = message;
    }

测试:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/sq_ikk/article/details/113588693