Preconditions 提供了一组静态方法,用于在方法执行前验证参数的有效性。这些方法在条件不满足时抛出异常,从而确保方法得到合法的输入。

用于解决校验地狱:

// 校验入参验证码是否为空
if (StringUtils.isBlank(verificationCode)) {
	return Response.fail(ResponseCodeEnum.PARAM_NOT_VALID.getErrorCode(), "验证码不能为空");
}
 
// 参数校验2
if (条件判断2) {
	return Response.fail(ResponseCodeEnum.PARAM_NOT_VALID.getErrorCode(), "xxx");
}
 
// 参数校验3
if (条件判断3) {
	return Response.fail(ResponseCodeEnum.PARAM_NOT_VALID.getErrorCode(), "xxx");
}

Usage

// 校验入参验证码是否为空
Preconditions.checkArgument(StringUtils.isNotBlank(verificationCode), "验证码不能为空");

原代码:

if(StringUtils.isNotBlank(verificationCode)) {
	return Response.fail(ResponseCodeEnum.PARAM_NOT_VALID.getErrorCode(), "验证码不能为空");
}

也可以接入全局异常捕获,该方法会抛出 IllegalArgumentException 异常,直接捕获即可:

/**
 * 捕获 guava 参数校验异常
 * @return
 */
@ExceptionHandler({ IllegalArgumentException.class })
@ResponseBody
public Response<Object> handleIllegalArgumentException(HttpServletRequest request, IllegalArgumentException e) {
	// 参数错误异常码
	String errorCode = ResponseCodeEnum.PARAM_NOT_VALID.getErrorCode();
 
	// 错误信息
	String errorMessage = e.getMessage();
 
	log.warn("{} request error, errorCode: {}, errorMessage: {}", request.getRequestURI(), errorCode, errorMessage);
 
	return Response.fail(errorCode, errorMessage);
}