spring boot validation实现对参数的校验

validation实现对参数的校验

配置流程

  1. 引入spring-boot-starter-validation包
  2. 配置注解接口,配置注解接口实现类(implements ConstraintValidator<注解接口, 返回值>)
  3. 配置校验格式,并注解在实体类中
  4. 配置全局异常处理。

代码(手机号码验证)

注解类
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
@Retention(RUNTIME)
@Documented
//验证类
@Constraint(validatedBy = {IsMobileValidator.class })
public @interface IsMobile {
//  是否需要
    boolean required() default true;
//  信息
    String message() default "手机号码格式错误";

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

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

注解实现类
public class IsMobileValidator implements ConstraintValidator<IsMobile, String> {

    private boolean required = false;
//  初始化注解
    public void initialize(IsMobile isMobile) {
        required = isMobile.required();
    }
//  验证  
    public boolean isValid(String value, ConstraintValidatorContext context) {
        if(required) {
            return ValidatorUtil.isMobile(value);
        }else {
            if(StringUtils.isEmpty(value)) {
                return true;
            }else {
                return ValidatorUtil.isMobile(value);
            }
        }
    }

}
验证实现类
public class ValidatorUtil {
	
	private static final Pattern mobile_pattern = Pattern.compile("1\\d{10}");
	public static boolean isMobile(String src) {
		if(StringUtils.isEmpty(src)) {
			return false;
		}
		Matcher m = mobile_pattern.matcher(src);
		return m.matches();
	}
}
全局异常处理
public class GlobalException extends RuntimeException{

	private static final long serialVersionUID = 1L;
//	异常信息类
	private CodeMsg cm;
	
	public GlobalException(CodeMsg cm) {
		super(cm.toString());
		this.cm = cm;
	}

	public CodeMsg getCm() {
		return cm;
	}

}
拦截异常类
@ControllerAdvice
@ResponseBody
public class GlobalExceptionHandler {
//	拦截异常
	@ExceptionHandler(value=Exception.class)
	public Result<String> exceptionHandler(HttpServletRequest request, Exception e){
		e.printStackTrace();
		if(e instanceof GlobalException) {
			GlobalException ex = (GlobalException)e;
			return Result.error(ex.getCm());
		}else if(e instanceof BindException) {
			BindException ex = (BindException)e;
			List<ObjectError> errors = ex.getAllErrors();
			ObjectError error = errors.get(0);
			String msg = error.getDefaultMessage();
			return Result.error(CodeMsg.BIND_ERROR.fillArgs(msg));
		}else {
			return Result.error(CodeMsg.SERVER_ERROR);
		}
	}
}
异常信息类
public class CodeMsg {

    private int code;
    private String msg;

    //通用的错误码
    public static CodeMsg SUCCESS = new CodeMsg(0, "success");
    public static CodeMsg SERVER_ERROR = new CodeMsg(500100, "服务端异常");
    public static CodeMsg BIND_ERROR = new CodeMsg(500101, "参数校验异常:%s");

    public static CodeMsg SESSION_ERROR = new CodeMsg(500210, "Session不存在或者已经失效");
    public static CodeMsg PASSWORD_EMPTY = new CodeMsg(500211, "登录密码不能为空");
    public static CodeMsg MOBILE_EMPTY = new CodeMsg(500212, "手机号不能为空");
    public static CodeMsg MOBILE_ERROR = new CodeMsg(500213, "手机号格式错误");
    public static CodeMsg MOBILE_NOT_EXIST = new CodeMsg(500214, "手机号不存在");
    public static CodeMsg PASSWORD_ERROR = new CodeMsg(500215, "密码错误");



    private CodeMsg( ) {
    }

    private CodeMsg( int code,String msg ) {
        this.code = code;
        this.msg = msg;
    }

    public int getCode() {
        return code;
    }
    public void setCode(int code) {
        this.code = code;
    }
    public String getMsg() {
        return msg;
    }
    public void setMsg(String msg) {
        this.msg = msg;
    }

    public CodeMsg fillArgs(Object... args) {
        int code = this.code;
        String message = String.format(this.msg, args);
        return new CodeMsg(code, message);
    }

    @Override
    public String toString() {
        return "CodeMsg [code=" + code + ", msg=" + msg + "]";
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot提供了一个内置的验证框架,可以在请求处理的过程中,对通过GET请求传递的参数进行验证。使用Spring Boot Validation可以轻松地实现对请求参数校验。 首先,我们需要在请求参数的对应字段上使用相关的验证注解。例如,如果我们想要校验一个字符串参数的长度是否在一定范围内,可以在该参数字段上加上@Size(min=1, max=10)注解。这样,在接收到GET请求并映射到对应的处理方法时,Spring Boot就会自动进行参数校验。 接着,我们需要在处理请求的方法上加上@Validated注解,以启用参数校验功能。在处理方法的入参中,可以使用@Valid注解对需要校验参数对象进行注解。当请求到来时,Spring Boot会自动进行参数检验,并在检验不通过时,返回相应的错误信息。 例如,我们有一个GET请求处理方法,接收一个名为"name"的字符串参数: @GetMapping("/api/user") public String getUser(@RequestParam(name = "name") @Size(min=1, max=10, message="名称长度必须在1到10之间") String name) { return "Hello " + name; } 在这个方法上,我们使用了@Validated注解,并在name参数上加上了@Size注解。当接收到GET请求时,Spring Boot会自动校验name参数的长度是否在1到10之间,如果不满足条件,会返回指定的错误信息。 总结起来,Spring Boot Validation可以方便地对通过GET请求传递的参数进行校验。我们只需要在请求参数对应的字段上加上相应的验证注解,然后在处理方法上加上@Validated注解并在需要校验参数上加上@Valid注解即可。这样,当有GET请求到来时,Spring Boot会自动校验参数,并返回错误信息给客户端。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值