php网站模板修改,wordpress主题摘要字数,报价单模板表格,唯品会是哪做的网站异常处理
SpringMVC处理异常的方式有三种#xff0c;当然也可以使用AOP面向编程#xff0c;自定义一个类进入切入。
第一种#xff1a;使用SpringMVC提供的简单异常处理器SimpleMappingExceptionResolver !--SpringMVC提供的异常处理器类型#xff1a;SimpleMappingE…异常处理
SpringMVC处理异常的方式有三种当然也可以使用AOP面向编程自定义一个类进入切入。
第一种使用SpringMVC提供的简单异常处理器SimpleMappingExceptionResolver !--SpringMVC提供的异常处理器类型SimpleMappingExceptionResolver-- bean classorg.springframework.web.servlet.handler.SimpleMappingExceptionResolver !-- 异常映射属性 是一个map散列表 用于配置不同异常跳转到不同页面 -- property nameexceptionMappings props !--key: 用于指定异常类型 value用于指定跳转的页面名称-- prop keyjava.lang.Exceptionerror/prop /props /property /bean 第二种实现HandlerExceptionResolver接口自定义异常处理器,并注册 /** * 用户【】 IP[] * 在【时间】 * 操作【Controller.find】 发生如下异常 * xxxxxxxxxxxxxxxxxxxxx * yyyyyyyyyyyyyyyyyyyyy * */ package com.ssm.netctoss.util; import org.springframework.http.HttpStatus; import org.springframework.web.servlet.HandlerExceptionResolver; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class MyExceptionResolver implements HandlerExceptionResolver { Override public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object o, Exception e) { ModelAndView modelAndView new ModelAndView(); System.out.println(---------执行了自定义异常处理器------------); // 根据不同的异常类型设置不同的响应状态码 if (e instanceof MyCustomException) { response.setStatus(HttpStatus.BAD_REQUEST.value()); // 可以添加更多的自定义处理逻辑 System.out.println(-----); }else if (e instanceof IllegalArgumentException) { // }else { response.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value()); // 记录日志或其他处理逻辑 } // 可以将异常信息放入模型中供视图展示 modelAndView.addObject(errorMessage, e.getMessage()); // 设置视图名称 modelAndView.setViewName(error); return modelAndView; } } class MyCustomException extends Exception { public MyCustomException(String message) { super(message); } } xml配置文件添加 bean classcom.ssm.netctoss.util.MyExceptionResolver/ 第三种使用ExceptionHandler注解实现异常处理
1. 编写如下方法 2. 在方法上添加注解 3. 其他Controller继承即可 package com.ssm.netctoss.util; import org.springframework.web.bind.annotation.ExceptionHandler; import javax.servlet.http.HttpServletRequest; public class BaseController { ExceptionHandler public String executeEx(HttpServletRequest request,Exception e){ // request.setAttribute(msg, e.getMessage()); // request.setAttribute(code, 1); System.out.println(---------------注解异常); //根据不同异常类型返回不同视图 return error; } } 第四种使用AOP自定义异常处理类型 可以正常统一处理异常信息 并且 开启注解扫描别忘记了 package com.ssm.netctoss; import java.text.SimpleDateFormat; import java.util.Date; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import com.ssm.netctoss.pojo.Admin; import org.apache.log4j.Logger; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.springframework.stereotype.Component; /** * 用户【】 IP[] * 在【时间】 * 操作【Controller.find】 发生如下异常 * xxxxxxxxxxxxxxxxxxxxx * yyyyyyyyyyyyyyyyyyyyy * */ Component Aspect public class ExceptionLogger { Resource private HttpServletRequest request; Around(within(com.ssm.netctoss.controller..*)) public Object log(ProceedingJoinPoint p) throws Exception{ Object obj null; try { obj p.proceed(); } catch (Throwable e) { // 记录异常信息 Admin admin (Admin)request.getSession().getAttribute(LOGINADMIN); String msg; if(admin!null){ String adminCode admin.getAdminCode(); String ip request.getRemoteHost(); String now new SimpleDateFormat(yyyy-MM-dd HH:mm:ss).format(new Date()); String className p.getTarget().getClass().getName(); String methodName p.getSignature().getName(); msg用户[adminCode],IP[ip],在now],操作[className.methodName]时发生如下异常\n; } StackTraceElement[] elems e.getStackTrace(); for(StackTraceElement elem:elems){ msg\telem.toString()\n; } Logger logger Logger.getLogger(ExceptionLogger.class); logger.error(msg); //记录日志后抛出异常交给后面的代码继续处理 throw new Exception(e); } return obj; } }