Web异常处理:MissingServletRequestParameterException&MaxUploadSizeExceededException

本文作者:suxingrui
本文链接:https://blog.csdn.net/suxingrui/article/details/103789497
版权声明:本文为原创文章,转载请注明出处。

回顾2019年碰到的问题及解决方式
问题:Web异常处理:MissingServletRequestParameterException&MaxUploadSizeExceededException

问题发现:
开发过程中,前端因为少传required=true的参数,而导致调用失败,频繁需要与后台开发确认问题
如果能够直接在返回错误信息中反馈给前端开发人员,就能够减少这部分不必要的问题调查时间
(PS:当然这个信息不宜在生产环境开放,不然,接口信息很快就被确认了)

同样上传图片过大最好也是有足够的提示显示给用户

调查分析:

解决方法:
拦截异常,返回信息,有两种实现方式

1、直接拦截缺少参数的异常:MissingServletRequestParameterException

@Slf4j
@Conditional(ProdDisableCondition.class)
@ControllerAdvice(annotations = {RestController.class})
public class MissingRequestParameterExceptionHandler {

	@ResponseBody
	@ExceptionHandler(value = MissingServletRequestParameterException.class)
	public Object exceptionHandler(MissingServletRequestParameterException e) {
		log.error("System Exception:{}", e.getMessage());

		ResultBean<String> resultBean = new ResultBean<>();
		resultBean.setResultCode(CommonRuntimeException.Code.PARAM_FIELD_MISSING_000107);
		resultBean.setResultDesc("Missing Request Parameter");
		resultBean.setData(e.getMessage());

		return resultBean;
	}

}

2、拦截Exception异常,在里面if else处理:MaxUploadSizeExceededException

	@ResponseBody
	@ExceptionHandler(value = Exception.class)
	public Object exceptionHandler(HttpServletRequest request, HttpServletResponse response, Exception e) {

		// 默认为未知异常
		ResultBean<Object> resultBean = ResultBean.unknowError();

		// 如果是业务逻辑异常,返回具体的错误码与提示信息
		if (e instanceof AbstractRuntimeException) {
			AbstractRuntimeException ex = (AbstractRuntimeException) e;
			resultBean.setResultCode(ex.getCode()).setResultDesc(ex.getMessage());
		} else if (e instanceof MaxUploadSizeExceededException) {
			resultBean.setResultCode(CommonRuntimeException.Code.UPLOAD_IMAGE_BIG_ERROR_000108)
					.setResultDesc("上传图片过大,图片大小限制5MB以内。")
					.setData(e.getMessage());
		} else {
			// 对系统级异常进行日志记录
			log.error("System Exception:" + e.getMessage(), e);
		}
		return resultBean;
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值