上一节因为参数校验没有返回给前端界面,出现了BindException,接下来咱们解决一下:
GlobalException.java:全局异常
package com.fzf.seckill.exception;
import com.fzf.seckill.vo.RespBeanEnum;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @Author fzf
* @Date 2022/10/18 10:56
* @Function 全局异常
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class GlobalException extends RuntimeException{
private RespBeanEnum respBeanEnum;
}
GlobalExceptionHandler.java:全局异常处理
package com.fzf.seckill.exception;
import com.fzf.seckill.vo.RespBean;
import com.fzf.seckill.vo.RespBeanEnum;
import org.springframework.validation.BindException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
/**
* @Author fzf
* @Date 2022/10/18 10:57
* @Function 全局异常处理类
*/
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
public RespBean ExceptionHandler(Exception e){
if (e instanceof GlobalException){
GlobalException ex=(GlobalException) e;
return RespBean.error(ex.getRespBeanEnum());
}else if (e instanceof BindException){
BindException ex=(BindException) e;
RespBean respBean = RespBean.error(RespBeanEnum.BIND_ERROR);
respBean.setMessage("参数校验异常:"+ex.getBindingResult().getAllErrors().get(0).getDefaultMessage());
return respBean;
}
return RespBean.error(RespBeanEnum.ERROR);
}
}
RespBean.java:
package com.fzf.seckill.vo;
import lombok.*;
/**
* @Author fzf
* @Date 2022/10/17 18:45
* @Function
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class RespBean {
private long code;
private String message;
private Object obj;
/**
* 成功返回结果
* @return
*/
public static RespBean success(){
return new RespBean(RespBeanEnum.SUCCESS.getCode(),RespBeanEnum.SUCCESS.getMessage(),null);
}
/**
* 成功返回结果
* @return
*/
public static RespBean success(Object obj){
return new RespBean(RespBeanEnum.SUCCESS.getCode(),RespBeanEnum.SUCCESS.getMessage(),obj);
}
/**
* 失败返回结果
* @return
*/
public static RespBean error(RespBeanEnum respBeanEnum){
return new RespBean(respBeanEnum.getCode(),respBeanEnum.getMessage(),null);
}
/**
* 失败返回结果
* @return
*/
public static RespBean error(RespBeanEnum respBeanEnum,Object obj){
return new RespBean(respBeanEnum.getCode(),respBeanEnum.getMessage(),obj);
}
}
RespBeanEnum.java:
package com.fzf.seckill.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.Getter;
import lombok.ToString;
/**
* @Author fzf
* @Date 2022/10/17 18:45
* @Function
*/
@Getter
@ToString
@AllArgsConstructor
public enum RespBeanEnum {
//通用
SUCCESS(200, "SUCCESS"),
ERROR(500, "服务器异常"),
//登录模块
LOGIN_ERROR(500210,"用户名或密码不正确"),
MOBILE_ERROR(500211,"手机号码格式不正确"),
BIND_ERROR(500212,"参数校验异常");
private final Integer code;
private final String message;
}
UserServiceImpl.java:
package com.fzf.seckill.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fzf.seckill.exception.GlobalException;
import com.fzf.seckill.mapper.UserMapper;
import com.fzf.seckill.pojo.User;
import com.fzf.seckill.service.IUserService;
import com.fzf.seckill.utils.MD5Util;
import com.fzf.seckill.utils.ValidatorUtil;
import com.fzf.seckill.vo.LoginVo;
import com.fzf.seckill.vo.RespBean;
import com.fzf.seckill.vo.RespBeanEnum;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.thymeleaf.util.StringUtils;
/**
* <p>
* 服务实现类
* </p>
*
* @author fzf
* @since 2022-10-17
*/
@Service
@Slf4j
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {
@Autowired
private UserMapper userMapper;
/**
* 登录
*
* @param loginVo
* @return
*/
@Override
public RespBean doLogin(LoginVo loginVo) {
String mobile = loginVo.getMobile();
String password = loginVo.getPassword();
/*//参数校验
if (StringUtils.isEmpty(mobile) || StringUtils.isEmpty(password)) {
return RespBean.error(RespBeanEnum.LOGIN_ERROR);
}
if (!ValidatorUtil.isMobile(mobile)) {
return RespBean.error(RespBeanEnum.MOBILE_ERROR);
}*/
//根据手机号获取用户
User user = userMapper.selectById(mobile);
if (null==user){
throw new GlobalException(RespBeanEnum.LOGIN_ERROR);
}
//判断密码是否正确
if(!MD5Util.formPassToDBPass(password,user.getSlat()).equals(user.getPassword())){
throw new GlobalException(RespBeanEnum.LOGIN_ERROR);
}
log.info("登录成功");
return RespBean.success();
}
}
下一篇:使用cookie和session验证登录
(14条消息) Java秒杀系统完整项目实战——用cookie和seesion检验用户是否登录_最耀眼的那个繁星的博客-CSDN博客