前端Ajax/JS/HTML+后端SpringMVC(二)
1. jQuery AJAX1.1. jQuery框架中的ajax()函数在应用了jQuery框架后,调用
2. 异常的处理2.1. 设计案例创建简单的案例,发出 2.2. 创建并完成案例创建Maven Project,Group Id使用 检查 @Controller @RequestMapping("/test") public class TestController { } 然后添加2个方法处理2个请求,并在处理过程中,使得程序出现对应的异常: @RequestMapping("/null.do") public String handleNull() { String str = null; str.length(); return null; } @RequestMapping("/array.do") public String handleArray() { int[] arr = { 0 }; System.out.println(arr[10]); return null; } 2.3. 【不推荐】使用SimpleMappingExceptionResolver如果没有对异常进行处理,默认的处理方式下,会把异常的跟踪信息显示在页面中,这种做法会导致较差的用户体验,并且可能对外泄露了当前的业务逻辑甚至是项目机密。但是,频繁的使用 SpringMVC中提供了 <!-- 处理异常 --> <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> <!-- 异常与转发到的视图的映射 --> <property name="exceptionMappings"> <props> <prop key="java.lang.NullPointerException">error_null</prop> <prop key="java.lang.ArrayIndexOutOfBoundsException">error_array</prop> </props> </property> </bean> 使用这种做法最大的问题:无法针对某个问题进行详细的处理!也无法将具体的错误信息显示在页面中! 2.4. 【推荐】使用@ExceptionHandler在控制器类中自定义某个方法,用于统一处理异常,这个方法需要使用 @ExceptionHandler public String handleException(Exception e) { return null; } 每当出现异常时,SpringMVC就会自动调用以上方法,并且将捕获的异常对象作为调用该方法的参数,则处理时: @ExceptionHandler public String handleException(Exception e,HttpServletRequest request) { String message = e.getMessage(); if (e instanceof ArrayIndexOutOfBoundsException) { request.setAttribute("msg",message); return "err_array"; } return null; } 注意:尝试转发数据时,可以使用HttpServletRequest参数,也可以使用ModelAndView返回值,却不可以使用ModelMap参数。 2.5. Q&AQ:使用@ExceptionHandler和配置SimpleMappingExceptionResolver这2个做法来处理异常会冲突吗? A:两者同时使用,代码并不会出现错误,但是,对于同一个异常,注解方式优先。 Q:使用@ExceptionHandler这种方式处理异常时,可以不使用转发作为处理方式,而是直接响应JSON数据吗? A:可以!在处理异常的方法之前添加 Q:使用@ExceptionHandler这种方式处理异常时,处理异常的方法可以作用于其它控制器类中处理请求方法吗? A:不可以!常规做法是定义 public abstract class BaseController { @ExceptionHandler(ServiceException.class) @ResponseBody public ResponseResult handleException(ServiceException e) { // 准备返回值 ResponseResult rr = new ResponseResult(); // 向返回结果中封装错误信息 rr.setMessage(e.getMessage()); // 判断异常 if (e instanceof UserNotFoundException) { rr.setState(401); } else if (e instanceof PasswordNotMatchException) { rr.setState(402); } else if (e instanceof UpdateException) { rr.setState(500); } else { rr.setState(600); } // 返回 return rr; } } 2.6. 小结在开发项目时,业务层会在出现各种业务错误的情况下抛出不同的业务异常,例如此前项目中的 SpringMVC提供的统一处理异常的方式有2种,分别是使用 关于业务异常的处理,通常会在项目中创建 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |