zoukankan      html  css  js  c++  java
  • spring全局异常处理

    新建一个只用来处理异常的包:   exception

    在包中新一个异常处理类:继承与总异常:RuntimeException

    package com.lanou.demo.exception;
    //认证异常
    public class AuthenticationException extends RuntimeException{
    
        public AuthenticationException() {
        }
        public AuthenticationException(String message) {
            super(message);
        }
    }

    在新建自己想要处理的异常,这里例举登录时的异常处理:

    建立用户名错误异常,继承与上面建立的异常认证:

    package com.lanou.demo.exception;
    //用户名错误时接受的异常
    public class UnknownUsernameException extends AuthenticationException {
    
        public UnknownUsernameException() {
        }
    
        public UnknownUsernameException(String message) {
            super(message);
        }
    }

    建立密码错异常,同样继承与上面建立的异常认证:

    package com.lanou.demo.exception;
    //密码错误时接受的异常
    public class WrongPasswordException extends AuthenticationException {
    
        public WrongPasswordException() {
        }
        public WrongPasswordException(String message) {
            super(message);
        }
    }

    在@Service部分做抛出异常,判断异常类型:
    @Service
    public class UserServiceImpl implements UserService {
        @Override
        public UserBean login(String username, String password) {
            if ("admin".equals(username)){
                if ("admin".equals(password)){
                     UserBean user = new UserBean();
                     user.setUsername("admin");
                } else {
                    throw new WrongPasswordException();
                }
            } else {
                // 用户名在数据库中不存在, 抛出 未知用户名异常
                throw new UnknowUsernameException();
            }
            return null;
        }
    }

    创建异常解析器,根据异常的类型做进一步处理:

    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    //只需要让Spring创建这个bean就可以直接生效,配置文件不需要配置
    @Component
    public class GlobalExceptionResolver implements HandlerExceptionResolver {
        @Override
        public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
            ModelAndView mv = new ModelAndView();
            //在这儿统一的判断异常集体的类型,根据不同的异常返回不同的信息
            if (ex instanceof UnknownUsernameException){
    
                mv.addObject("message","用户名不存在");
                mv.setView(new MappingJackson2JsonView());
    
            }else {
                ex.printStackTrace();
                mv.addObject("message","服务器开小差了");
                mv.setView(new MappingJackson2JsonView());
            }
            return null;
        }
    }
    
    
  • 相关阅读:
    CI 搭建CMS框架
    java 对象
    JAVA 数组,(java核心技术 卷1)
    Android 点击事件,4种回调。
    andriod 中设置sdk升级代理服务器
    CI 自动操作日志
    CI 笔记 datagrid的调用,不支持多页面多次调用js
    CI 笔记 easyui 结合后,左侧导航跳转问题
    CI 笔记 数据库
    mysql索引提高查询速度
  • 原文地址:https://www.cnblogs.com/zhouchangyang/p/10908536.html
Copyright © 2011-2022 走看看