背景
在开发测试的时候,把接口文档甩给其他人员的时候,经常会在业务报警群里看到这样的报错
xx
dev
59142027E864A81BE39BB95073D5A43
exceptionHandler, handler error:Required String parameter 'xxxxxx' is not present
xx
dev
0BAF1B927DBE49D9B411CA31423C7A82
exceptionHandler, handler error:Required request body is missing: public com.xx.support.result.Result<com.xx.pm.api.response.xxxxxResp> com.xx.xx.api.controller.xxxxController.edit(com.xx.xx.api.request.xxxxVO)
这样的报错对非开发人员不友好,往往不知道这是什么错误,需要将其进行改为业务报错
但是,这样的报错往往在没有进入业务代码的时候就抛异常了。
处理方法
在全局异常Handler中加入如下代码
@ExceptionHandler(HttpMessageNotReadableException.class)
@ResponseBody
public Result handleMissingRequestBody(HttpMessageNotReadableException ex) {
log.error("请求体缺失异常:{}", ex.getMessage(), ex);
// Todo:这里具体的写法,看你发挥了!!
String msg = "请求体缺失:请按文档传入请求体后重试。";
DingAlarmUtils.alarmException(msg);
return Result.buildErrorResult(msg);
}
@ExceptionHandler(MissingServletRequestParameterException.class)
@ResponseBody
public Result<?> handleMissingServletRequestParameterException(MissingServletRequestParameterException ex) {
log.error("请求参数缺失异常:{}", ex.getMessage(), ex);
// Todo:这里具体的写法,看你发挥了!!
String msg = "请求参数缺失:请按文档传入请求体后重试。";
DingAlarmUtils.alarmException(msg);
return Result.buildErrorResult(msg);
}