• 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;
        }
    }
    
    
  • 相关阅读:
    python2代码改成python3踩过的坑
    Mac下为什么有的文件名后带一个* 星号?
    Mac 的 Vim 中 delete 键失效的原因和解决方案(转)
    使用pandas处理大型CSV文件(转)
    Java基础——02
    javaee相关基础
    Cookie&Session笔记
    EL&JSTL笔记------jsp
    JavaWeb基础
    Java基础——01
  • 原文地址:https://www.cnblogs.com/zhouchangyang/p/10908536.html
Copyright © 2020-2023  润新知