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;
        }
    }
    
    
  • 相关阅读:
    (二)处理视频
    vim下多行注释与解注释
    (一)读取显示图片
    解决死锁的方法
    死锁、活锁和饿死的理解(转)
    C# winfrom 窗体的StartPosition 属性
    Show()和ShowDialog()
    WinForm应用程序之注册模块的设计与实现
    Epplus使用教程1(基本介绍)
    C#中操作txt,抛出“正由另一进程使用,因此该进程无法访问此文件”
  • 原文地址:https://www.cnblogs.com/zhouchangyang/p/10908536.html
Copyright © 2011-2022 走看看