springboot参数校验异常集中处理

mybatisplus报错:org.apache.ibatis.binding.BindingException: Parameter 'xxx' not found. Available parameters are [arg1, arg0, param1, param2]

参数校验异常集中处理

@ControllerAdvice
public class WebExceptionHandler {
    //处理Get请求中 使用@Valid 验证路径中请求实体校验失败后抛出的异常,详情继续往下看代码
    @ExceptionHandler(BindException.class)
    @ResponseBody
    public Result BindExceptionHandler(BindException e) {
        String message = e.getBindingResult().getAllErrors().stream().map(DefaultMessageSourceResolvable::getDefaultMessage).collect(Collectors.joining());
        return Result.build(ResultCode.PARAM_ERROR.getCode(),message);
    }

    //处理请求参数格式错误 @RequestParam上validate失败后抛出的异常是javax.validation.ConstraintViolationException
    @ExceptionHandler(ConstraintViolationException.class)
    @ResponseBody
    public Result ConstraintViolationExceptionHandler(ConstraintViolationException e) {
        String message = e.getConstraintViolations().stream().map(ConstraintViolation::getMessage).collect(Collectors.joining());
        return Result.build(ResultCode.PARAM_ERROR.getCode(),message);
    }

    //处理请求参数格式错误 @RequestBody上validate失败后抛出的异常是MethodArgumentNotValidException异常。
    @ExceptionHandler(MethodArgumentNotValidException.class)
    @ResponseBody
    public Result MethodArgumentNotValidExceptionHandler(MethodArgumentNotValidException e) {
        String message = e.getBindingResult().getAllErrors().stream().map(DefaultMessageSourceResolvable::getDefaultMessage).collect(Collectors.joining());
        return Result.build(ResultCode.PARAM_ERROR.getCode(),message);
    }

    //数据库唯一键重复异常捕获处理
	@ExceptionHandler(SQLIntegrityConstraintViolationException.class)
	public R handleSqlValidException(SQLIntegrityConstraintViolationException e) {
		log.error("params illegal {}", e.getMessage());
		//将错误信息返回给前台
		return R.failed("params illegal");
	}
}

总结:MethodArgumentNotValidException异常类对应处理@RequestBody上validate失败后抛出的异常;
ConstraintViolationException异常类对应处理@RequestParam上validate失败后抛出的异常;
SQLIntegrityConstraintViolationException对应处理数据库唯一键冲突异常;

补充

  • controller层接收参数,如果使用json传参用bean接收需要添加@requestBody注解,否则bean属性值为null
  • 在上述情况下只能只能用一个bean接收参数,因为controller层只能使用一个@RequestBody注解;如果需要使用多个bean接收参数,则使用key=value形式
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值