十年网站建设,网站模板双语,html5做的网站有哪些,网站开发进度表全局异常就是对框架所有异常进行统一管理。 我们在可能发生异常的方法里throw new RuntimeException(发生异常了..);抛给控制器#xff0c;1.然后由全局异常处理器对异常进行统一处理。 1. 定义统一返回实体
import java.util.HashMap;/*** 操作消息提醒* * auth… 全局异常就是对框架所有异常进行统一管理。 我们在可能发生异常的方法里throw new RuntimeException(发生异常了..);抛给控制器1.然后由全局异常处理器对异常进行统一处理。 1. 定义统一返回实体
import java.util.HashMap;/*** 操作消息提醒* * author ruoyi*/
public class AjaxResult extends HashMapString, Object
{private static final long serialVersionUID 1L;/*** 返回错误消息* * param code 错误码* param msg 内容* return 错误消息*/public static AjaxResult error(String msg){AjaxResult json new AjaxResult();json.put(msg, msg);json.put(code, 500);return json;}/*** 返回成功消息* * param msg 内容* return 成功消息*/public static AjaxResult success(String msg){AjaxResult json new AjaxResult();json.put(msg, msg);json.put(code, 0);return json;}
}
2. 定义登录异常返回实体
/*** 登录异常* * author ruoyi*/
public class LoginException extends RuntimeException
{private static final long serialVersionUID 1L;protected final String message;public LoginException(String message){this.message message;}Overridepublic String getMessage(){return message;}
}
3. Controller层的全局异常统一处理
如果全部异常处理返回json那么可以使用RestControllerAdvice代替ControllerAdvice这样在方法上就可以不需要添加ResponseBody。RestControllerAdvice是由ControllerAdvice、ResponseBody组成
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.exception.LoginException;/*** 全局异常处理器* * author ruoyi*/
RestControllerAdvice
public class GlobalExceptionHandler
{private static final Logger log LoggerFactory.getLogger(GlobalExceptionHandler.class);//1全局数据绑定//应用到所有RequestMapping注解方法 //此处将键值对添加到全局注解了RequestMapping的方法都可以获得此键值对 ModelAttribute public void addUser(Model model) { model.addAttribute(msg, 此处将键值对添加到全局注解了RequestMapping的方法都可以获得此键值对); } //2全局数据预处理//应用到所有RequestMapping注解方法在其执行之前初始化数据绑定器 //用来设置WebDataBinder InitBinder(user)public void initBinder(WebDataBinder binder) {} /*** 登录异常*///3全局异常处理//应用到所有RequestMapping注解的方法在其抛出Exception异常时执行 //定义全局异常处理value属性可以过滤拦截指定异常此处拦截所有的Exception ExceptionHandler(LoginException.class)public AjaxResult loginException(LoginException e){log.error(e.getMessage(), e);return AjaxResult.error(e.getMessage());}
}
4. 测试全局异常处理
Controller
public class SysIndexController
{/*** 首页方法*/GetMapping(/index)public String index(ModelMap mmap){/*** 模拟用户未登录抛出业务逻辑异常*/SysUser user ShiroUtils.getSysUser();if (StringUtils.isNull(user)){throw new LoginException(用户未登录无法访问请求。);}mmap.put(user, user);return index;}
}
测试响应结果
{msg: 用户未登录无法访问请求。,code: 500
}
6. 接口异常请求返回500html页面
ExceptionHandler(LoginException.class)
public Object loginException(HttpServletRequest request, LoginException e)
{log.error(e.getMessage(), e);if (ServletUtils.isAjaxRequest(request)){return AjaxResult.error(e.getMessage());}else{return new ModelAndView(/error/500);}
}