2018-12-11 全局异常处理器

1.全局异常处理器

1.1 在codeMsg里增加 一个参数拼接方法 filledArgs

public static CodeMsg BIND_ERROR=new CodeMsg(500101,"参数校验异常:%s"); //有个拼接异常%s
public CodeMsg fillArgs(Object...args) {
        int code=this.code;
        String message=String.format(this.msg, args);
        return new CodeMsg(code,message);
    }

1.2 全局异常处理类

package com.ryan.miaosha.exception;

import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.springframework.validation.BindException;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

import com.ryan.miaosha.domain.CodeMsg;
import com.ryan.miaosha.domain.Result;


@ControllerAdvice
@ResponseBody
public class GlobalExceptionHandler {
    @ExceptionHandler(value=Exception.class)
    public Result exceptionHandler(HttpServletRequest request, Exception e){
        e.printStackTrace();
        if(e instanceof GlobalException) {
            GlobalException ex = (GlobalException)e;
            return Result.error(ex.getCm());
        }else if(e instanceof BindException) {
            BindException ex = (BindException)e;
            List errors = ex.getAllErrors();
            ObjectError error = errors.get(0);
            String msg = error.getDefaultMessage();
            return Result.error(CodeMsg.BIND_ERROR.filledArgs(msg));
        }else {
            return Result.error(CodeMsg.SERVER_ERROR);
        }
    }
}


1.3 全局异常类

package com.ryan.miaosha.exception;

import com.ryan.miaosha.domain.CodeMsg;

public class GlobalException extends RuntimeException{

    private static final long serialVersionUID = 1L;
    
    private CodeMsg cm;
    
    public GlobalException(CodeMsg cm) {
        super(cm.toString());
        this.cm = cm;
    }

    public CodeMsg getCm() {
        return cm;
    }

}

1.4 全局异常类

@Service
public class MiaoshaUserService {
    
    
    //public static final String COOKI_NAME_TOKEN = "token";
    
    @Autowired
    MiaoshaUserDao miaoshaUserDao;
    
    @Autowired
    RedisService redisService;
    
    public MiaoshaUser getById(long id) {
        return miaoshaUserDao.getById(id);
    }
    
    public boolean login(LoginVo loginVo) {
        String mobile = loginVo.getMobile();
        long id=Long.parseLong(mobile);
        MiaoshaUser userById = getById(id);
        if(userById==null) {
             throw new GlobalException(CodeMsg.USER_NOT_EXIST);
        }
        String saltDB = userById.getSalt();
        String passWEB=loginVo.getPassword();
        String passValidated=MD5Util.WebPassToDB(passWEB, saltDB);
        String passDB=userById.getPassword();
        if(!passDB.equals(passValidated)) {
            throw new GlobalException(CodeMsg.PASSWORD_ERROR);
        }
        return true;
    }

1.5 controller的内容变得很简洁



//请求成功    为什么传入loginVo  因为要接收网页表单传来的参数  将手机号和密码传入一个对象中 
    @RequestMapping("/do_login")
    @ResponseBody
    Result dologin(@Valid LoginVo loginVo) {
        /*String mobile = loginVo.getMobile();
        String passInput=loginVo.getPassword();
        if(StringUtils.isEmpty(mobile)) {
            return Result.error(CodeMsg.MOBILE_EMPTY);
        }
        if(!ValidatorUtil.isMobile(mobile)) {
            return Result.error(CodeMsg.MOBILE_ERROR);
        }
        if(StringUtils.isEmpty(passInput)) {
            return Result.error(CodeMsg.PASSWORD_EMPTY);
        }
         log.info(loginVo.toString());*/
         //登录
        /* CodeMsg cm = miaoshaUserService.login(loginVo);
         if(cm.getCode()==0) {
             return Result.success(true);
         }else {
             return Result.error(cm);
         }*/
        miaoshaUserService.login(loginVo);
        return Result.success(true);
    }

你可能感兴趣的:(2018-12-11 全局异常处理器)