合规国际互联网加速 OSASE为企业客户提供高速稳定SD-WAN国际加速解决方案。 广告
# :-: 异常处理 ``` 通常一个web框架中,有大量需要处理的异常。比如业务异常,权限不足等等。前端通过弹出提示信息的方式告诉用户出了什么错误。 通常情况下我们用try.....catch....对异常进行捕捉处理,但是在实际项目中对业务模块进行异常捕捉,会造成代码重复和繁杂, 我们希望代码中只有业务相关的操作,所有的异常我们单独设立一个类来处理它。全局异常就是对框架所有异常进行统一管理。 我们在可能发生异常的方法里throw抛给控制器。然后由全局异常处理器对异常进行统一处理。 如此,我们的Controller中的方法就可以很简洁了。 ``` 所谓全局异常处理器就是使用@ControllerAdvice注解。示例如下: ~~~ package com.hjf.common.exception; import com.hjf.common.config.CodeUtil; import com.hjf.common.base.BaseResp; import com.hjf.common.util.JsonUtil; import com.hjf.common.util.web.ResponseUtils; import com.hjf.core.spring.WebUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.validation.ObjectError; import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; import java.util.HashMap; import java.util.Map; /** * 全局异常处理类 */ @ResponseBody @ControllerAdvice @Slf4j public class MyControllerAdvice { /** * 参数校验异常处理 */ @ExceptionHandler(MethodArgumentNotValidException.class) public BaseResp MethodArgumentNotValidExceptionHandler(MethodArgumentNotValidException e) { // 从异常对象中拿到ObjectError对象 ObjectError objectError = e.getBindingResult().getAllErrors().get(0); // 然后提取错误提示信息进行返回 log.error("【参数校验异常处理】"+objectError.getDefaultMessage()); return BaseResp.failMsg(objectError.getDefaultMessage()); } /** * 通用异常处理 */ @ExceptionHandler(value = Exception.class) public void errorHandle(Exception e){ log.error("【系统异常处理】"+e.getMessage()); Map<String,Object> map = new HashMap<String,Object>(); map.put("code", CodeUtil.error); map.put("msg","抱歉系统发生了点小问题"); String json= JsonUtil.obj2Json(map); ResponseUtils.renderJson(WebUtils.getResponse(), json); } // /** // * 通用异常处理 // */ // @ExceptionHandler(value = Exception.class) // public Map<String,Object> errorHandle(Exception e){ // log.error("【系统异常处理】"+e.getMessage()); // Map<String,Object> map = new HashMap<String,Object>(); // map.put("code", CodeUtil.error); // map.put("msg","抱歉系统发生了点小问题"); // return map; // } // /** // * 通用异常处理 // */ // @ExceptionHandler(value = CommonException.class) // public Map<String,Object> commonErrorHandle(Exception e){ // log.error("【通用异常处理】"+e.getMessage()); // Map<String,Object> map = new HashMap<String,Object>(); // map.put("code", CodeUtil.error); // map.put("msg",e.getMessage()); // return map; // } /** * 通用异常处理 */ @ExceptionHandler(value = CommonException.class) public void commonErrorHandle(Exception e){ log.error("【通用异常处理】"+e.getMessage()); Map<String,Object> map = new HashMap<String,Object>(); map.put("code", CodeUtil.error); map.put("msg",e.getMessage()); String json= JsonUtil.obj2Json(map); ResponseUtils.renderJson(WebUtils.getResponse(), json); } } ~~~