Spring MVC 异常处理 (九)
完整的项目案例: springmvc.zip
目录
实例
除了依赖spring-webmvc还需要依赖jackson-databind(用于转换json数据格式)
- <dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.6</version>
</dependency>- 项目结构:
配置web.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
- version="4.0">
- <!-- 请求总控器 -->
- <servlet>
- <servlet-name>dispatcher</servlet-name>
- <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
- <init-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>classpath:dispatcher-servlet.xml</param-value>
- </init-param>
- </servlet>
- <servlet-mapping>
- <servlet-name>dispatcher</servlet-name>
- <url-pattern>/</url-pattern>
- </servlet-mapping>
- </web-app>
配置dispatcher-servlet.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
- xmlns:context="http://www.springframework.org/schema/context"
- xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
- <context:component-scan base-package="edu.nf.ch09"/>
- <mvc:annotation-driven/>
- <mvc:default-servlet-handler/>
- <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
- <property name="prefix" value="/WEB-INF/jsp/"/>
- <property name="suffix" value=".jsp"/>
- </bean>
- </beans>
Controller (UserController)
- package edu.nf.ch09.controller;
- import edu.nf.ch09.controller.vo.ResponseVO;
- import edu.nf.ch09.entity.Users;
- import edu.nf.ch09.service.UserService;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Controller;
- import org.springframework.web.bind.annotation.PostMapping;
- import org.springframework.web.bind.annotation.ResponseBody;
- import javax.servlet.http.HttpSession;
- /**
- * @author wangl
- * @date 2018/11/5
- */
- @Controller
- public class UserController {
- @Autowired
- private UserService userService;
- /**
- * 局部异常处理方法
- *
- * @ExceptionHandler标注的方法用于专门处理请求方法抛出的异常
- * value属性指定异常的Class对象(是一个数组,可以指定多个class),
- * 表示捕获什么样的异常对象,最后在标注的方法中传入一个异常参数,就可以得到相应的异常对象
- * 注意:@ExceptionHandler标注的方法只在当前的Controller类中有效,
- * 在其他类中必须重新编写相关的Handler异常处理方法,
- * 如果希望让所有的Controller都共享一个Handler异常处理,那么可以配置为全局异常处理
- *
- * @return
- */
- /*@ExceptionHandler(UserException.class)
- public ResponseVO handlerException(RuntimeException e){
- ResponseVO vo = new ResponseVO();
- vo.setCode(401);
- vo.setMessage(e.getMessage());
- return vo;
- }*/
- /**
- * 用户登陆
- * @param user
- * @param session
- * @return
- */
- @PostMapping("/userLogin")
- @ResponseBody
- public ResponseVO login(Users user, HttpSession session){
- ResponseVO vo = new ResponseVO();
- //如果login方法引发了异常,则会执行上面的handlerLoginException异常处理方法
- user = userService.login(user);
- session.setAttribute("user", user);
- vo.setValue("index.html");
- return vo;
- }
- @PostMapping("/addUser")
- @ResponseBody
- public ResponseVO addUser(Users user){
- userService.addUser(user);
- return new ResponseVO();
- }
- }
ExceptionAdvice(全局的异常处理类)
- package edu.nf.ch09.controller.advice;
- import edu.nf.ch09.controller.vo.ResponseVO;
- import edu.nf.ch09.service.exception.DataAccessException;
- import edu.nf.ch09.service.exception.UserException;
- import org.springframework.web.bind.annotation.ControllerAdvice;
- import org.springframework.web.bind.annotation.ExceptionHandler;
- import org.springframework.web.bind.annotation.ResponseBody;
- /**
- * @author wangl
- * @date 2018/11/5
- * 定义一个全局的异常处理类(类似一个切面)
- * 这个类中定义的所有方法都是异常处理方法,
- * 也可以理解为是全局的异常通知
- * value属性指定对哪些控制器进行切入拦截
- */
- @ControllerAdvice("edu.nf.ch09.controller")
- public class ExceptionAdvice {
- /**
- * 全局异常处理方法
- * 用于处理用户登陆异常
- * @param e
- * @return
- */
- @ExceptionHandler(UserException.class)
- @ResponseBody
- public ResponseVO handlerLoginException(RuntimeException e){
- ResponseVO vo = new ResponseVO();
- vo.setCode(401);
- vo.setMessage(e.getMessage());
- return vo;
- }
- /**
- * 全局异常处理方法
- * 用于处理crud操作
- * @param e
- * @return
- */
- @ExceptionHandler(DataAccessException.class)
- @ResponseBody
- public ResponseVO handlerDataAccessException(RuntimeException e){
- ResponseVO vo = new ResponseVO();
- vo.setCode(500);
- vo.setMessage(e.getMessage());
- return vo;
- }
- }
持久层引发的异常
- package edu.nf.ch09.dao.impl;
- import edu.nf.ch09.dao.UserDao;
- import edu.nf.ch09.entity.Users;
- import edu.nf.ch09.service.exception.DataAccessException;
- import org.springframework.stereotype.Repository;
- /**
- * @author wangl
- * @date 2018/11/5
- */
- @Repository
- public class UserDaoImpl implements UserDao {
- @Override
- public Users getUserByName(String userName) {
- Users user = null;
- if("user1".equals(userName)){
- user = new Users();
- user.setUserName("user1");
- user.setPassword("123456");
- }
- return user;
- }
- @Override
- public void saveUser(Users user) {
- System.out.println("insert into user_info values ...");
- throw new DataAccessException("添加失败");
- }
- }
业务逻辑层引发的异常
- package edu.nf.ch09.service.impl;
- import edu.nf.ch09.dao.UserDao;
- import edu.nf.ch09.entity.Users;
- import edu.nf.ch09.service.UserService;
- import edu.nf.ch09.service.exception.UserException;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- /**
- * @author wangl
- * @date 2018/11/5
- */
- @Service
- public class UserServiceImpl implements UserService {
- @Autowired
- private UserDao userDao;
- @Override
- public Users login(Users user) {
- Users newUser = userDao.getUserByName(user.getUserName());
- if(newUser == null){
- throw new UserException("用户不存在");
- }
- if(!user.getPassword().equals(newUser.getPassword())){
- throw new UserException("密码错误");
- }
- return newUser;
- }
- @Override
- public void addUser(Users user) {
- userDao.saveUser(user);
- }
- }
页面收到异常消息
Spring MVC 异常处理 (九)的更多相关文章
- Spring MVC异常处理SimpleMappingExceptionResolver
Spring MVC异常处理SimpleMappingExceptionResolver[转] (2012-12-07 13:45:33) 转载▼ 标签: 杂谈 分类: 技术分享 Spring3.0中 ...
- Spring MVC异常处理代码完整实例
Spring MVC异常处理流程: 提供构造方法传值: 配置异常处理器的bean
- Spring MVC异常处理详解
Spring MVC中异常处理的类体系结构 下图中,我画出了Spring MVC中,跟异常处理相关的主要类和接口. 在Spring MVC中,所有用于处理在请求映射和请求处理过程中抛出的异常的类,都要 ...
- Spring MVC异常处理
Spring Mvc 中异常处理,一般有两种解决办法: 一.利用org.springframework.web.servlet.handler.SimpleMappingExceptionResolv ...
- Spring MVC异常处理详解(转)
下图中,我画出了Spring MVC中,跟异常处理相关的主要类和接口. 在Spring MVC中,所有用于处理在请求映射和请求处理过程中抛出的异常的类,都要实现HandlerExceptionReso ...
- Spring系列(七) Spring MVC 异常处理
Servlet传统异常处理 Servlet规范规定了当web应用发生异常时必须能够指明, 并确定了该如何处理, 规定了错误信息应该包含的内容和展示页面的方式.(详细可以参考servlet规范文档) 处 ...
- Spring MVC异常处理详解 ExceptionHandler good
@ControllerAdvice(basePackageClasses = AcmeController.class) public class AcmeControllerAdvice exten ...
- Spring MVC异常处理实例
以下内容引用自http://wiki.jikexueyuan.com/project/spring/mvc-framework/spring-exception-handling-example.ht ...
- Spring MVC异常处理 和 重定向传递数据
1.异常处理介绍 Spring在web项目中,如果在请求处理时出现异常,那输出会是Servlet响应.这时异常需要以某种方式转换为响应. Spring将异常转换为响应的方式: a.特定的Spring异 ...
随机推荐
- Struts2体系介绍
回顾Struts2,在会用基础上重看的理解. Struts 2框架架构流程 一个请求在Struts 2框架中的处理大概分为以下几个步骤. (1) 客户端提交一个HttpServletRequest请求 ...
- Hadoop学习笔记(二):简单操作
1. 启动namenode和datanode,在master上输入命令hdsf dfsadmin -report查看整个集群的运行情况(记得关闭防火墙) 2. 输入命令查看hadoop监听的端口,ne ...
- 五分钟轻松了解Hbase面向列的存储
说明:从严格的列式存储的定义来看,Hbase并不属于列式存储,有人称它为面向列的存储,请各位看官注意这一点. 行式存储 传统的数据库是关系型的,且是按行来存储的.如下图: 其中只有张三把一行数据填满了 ...
- Android AIDL 实例
为使应用程序之间能够彼此通信,Android提供了IPC (Inter Process Communication,进程间通信)的一种独特实现: AIDL (Android Interface Def ...
- 【Go】优雅的读取http请求或响应的数据-续
原文链接:https://blog.thinkeridea.com/201902/go/you_ya_de_du_qu_http_qing_qiu_huo_xiang_ying_de_shu_ju_2 ...
- 使用MySQL组复制的限制和局限性
本节列出和解释了组复制相关的要求和限制. 1.组复制的要求 要使用组复制,每个MySQL节点必须满足以下条件: 1.1 基本要求 InnoDB存储引擎:数据必须存储在事务型的InnoDB存储引擎中.事 ...
- YARN集群的mapreduce测试(五)
将user表计算后的结果分区存储 测试准备: 首先同步时间,然后master先开启hdfs集群,再开启yarn集群:用jps查看: master上: 先有NameNode.SecondaryNameN ...
- [JavaScript] promise概述
promise promise 是 es6 提出的一个异步解决方案,比传统回调事件的写法更加合理更加强大,主要还是优雅 promise 有 pending(等待中),fulfilled(已成功),re ...
- SQL语句害死人
最近在弄Android的SQLite,觉得其语法是在难搞~ 在这里把一些正确规范的实例贴出来,供参考 ';
- .net敏捷开发框架 力软敏捷开发(learun) 让开发变的更简单
版本:6.1.6.2 体验地址:www.fishcmonkey.com 联系QQ:6539471