的几种统一处理方式,对程序返回的数据友好,返回给前端的数据信息是可读的。通常考虑将异常封装或组织成结构化返回。基于SpringBoot系统,已经提供了一些方法来实现。今天我们主要讲一下基于SpringBoot解决上述问题。@ExceptionHandler@ExceptionHandler可以作为一种统一的异常拦截方式,对于指定的异常,可以按照自己想要的方式自由组合返回的数据信息和结构。自由度非常高。这里需要注意一点,人们往往会直接通过这里的response对象返回响应结果,这样会导致ResponseBodyAdvice、HandlerInterceptor等后续处理不再被触发。因此,在使用该方法时,尽量不要使用response.write方法直接返回,而是使用统一的数据结构作为处理返回值。//推荐@ResponseStatus(value=HttpStatus.OK)@ExceptionHandler(value=ConstraintViolationException.class)@ResponseBodypublicResponBadMethodArgumentTypeMismatchException(ConstraintViolationExceptione){returnResp.badRequest(e.getConstraintViolations().findstream().().get().getMessage());}//不推荐@ExceptionHandler(Exception.class)publicvoidexception(Exceptione,HttpServletResponseresponse)throwsIOException{response.setContentType("application/json;charset=UTF-8");log.error("系统异常:",e);response.getWriter().write($.json.toJsonString(Resp.customize(RpcResult.SERVER_ERROR,"服务器异常,请稍后重试"));}ErrorControllerSpringBoot如果没有异常捕获器,默认会调用/error接口当异常发生时(可以通过server.error.path修改),类似写接口,对异常进行捕获和处理。这种方法的优先级会弱一点,不过也是个好办法。你也可以通过配置实现异常处理,可以参考:露。课外扩展执行优先级说明1、HandlerInterceptor.preHandle()2、业务方法3、@ExceptionHandler4、ResponseBodyAdvice.supports()5、ResponseBodyAdvice.beforeBodyWrite()6、HandlerInterceptor.postHandle()7、HandlerInterceptor.afterCompletion()