【Web开发技术】异常处理机制的使用

文章目录

    • 一、引言
      • 1、应用场景
      • 2、语法
      • 3、体系
    • 二、详细设计(后端开发)
      • 1、信息提示常量类
      • 2、自定义异常
      • 3、Model层
      • 4、Controller层
      • 5、View层

一、引言

       编程也有很久的时间了,如果每个报的错误和寻找的答案写成一张纸,叠加起来也得有三层楼那么高了,当然在学习了Java之后这样的现象有所缓解。
       回想起三年前学习Java,第一天学习到的与C语言有所不同的知识里,就有一个特殊机制异常处理机制。他的主要作用是加强程序的健壮性

1、应用场景

异常:程序执行过程中的不正常情况。

(例)

  • 数据类型的转换
    (当你希望他能够按照提醒输入时,你的反应:爱了爱了,真听话)
    【Web开发技术】异常处理机制的使用_第1张图片
    (他:我就不,我就不,略略略。你:…)
    【Web开发技术】异常处理机制的使用_第2张图片
    (遇到这种情况,初学者是怎么解决?)
    我加了一个初学者,他说将输入Float类型换为String类型进行切割,得到String类型数组然后转为Char数组,最后进行Ascll表比对?
    这个方法确实没错,但是是不有点麻烦,使得内存使用过多,且代码复杂。如果需求再复杂一点,是不是代码可读性就直线下降?如果需求添加(可以计算公式a+a=2a)是不是代码可维护性又下降了?是不是就使得代码失去了健壮性

(使用了异常处理机制之后)
【Web开发技术】异常处理机制的使用_第3张图片

2、语法

		try {
			// 认为可能会出现错误的代码
		} catch (Exception e) {
			// 异常处理 提示 其他的操作
		}

3、体系

【Web开发技术】异常处理机制的使用_第4张图片

二、详细设计(后端开发)

1、信息提示常量类

用于返回异常结果

public class MessageConstant {

    public static final String PASSWORD_ERROR = "密码错误";
    public static final String ACCOUNT_NOT_FOUND = "账号不存在";
    public static final String ACCOUNT_LOCKED = "账号被锁定";
    public static final String FILE_MOVE_ERROR_URL = "文件路径错误";
    public static final String FILE_MOVE_ERROR_NAME = "文件夹名不能为空";
    public static final String FILE_MOVE_ERROR_USER = "非本人操作";
    public static final String FOLDER_ADD_ERROR = "文件夹创建失败";
    public static final String FOLDER_ADD_ERROR_NO = "文件名存在违禁字符";
    public static final String FOLDER_ADD_ERROR_GS = "文件夹格式错误";
    public static final String FOLDER_ADD_ERROR_CF = "文件夹重复";
    public static final String FOLDER_ADD_REPEAT_ERROR = "文件名存在";
    
}

2、自定义异常

/**
 * 文件创建异常 error
 */
public class FileException extends BaseException{

    public FileException() {}

    public FileException(String msg) {
        super(msg);
    }
    
}

3、Model层

以我写的云盘项目中创建文件为例

	@Override
    public void insertFolder(AddFolderDto addFolderDto) {

        // 判断是否为合法路径
        if (addFolderDto.getUrl().equals(null)) {
            throw new FileException(MessageConstant.FILE_MOVE_ERROR_URL);
        }

        // 文件夹名不为空
        if (addFolderDto.getName().equals(null)) {
            throw new FileException(MessageConstant.FILE_MOVE_ERROR_NAME);
        }

        // 判断文件名是否合法
        for (int i = 0;i < FileUtil.NO.length;i++) {
            if (addFolderDto.getName().contains(FileUtil.NO[i])) {
                throw new FileException(MessageConstant.FOLDER_ADD_ERROR_NO);
            }
        }

        if (addFolderDto.getName().split("\\.").length > 1) {
            throw new FileException(MessageConstant.FOLDER_ADD_ERROR_GS);
        }

        if (fileMapper.selectByFolderName(addFolderDto.getName()) != null) {
            throw new FileException(MessageConstant.FOLDER_ADD_ERROR_CF);
        }
        
        fileMapper.insertFolder(addFolderDto);
    }

可能上面会有点看不懂,再看一个登录异常

	@Override
    public User login(User user) {
        User u = userMapper.login(user.getEmail());

        // 1、账号不存在
        if (u == null) {
            throw new AccountNotFoundException(MessageConstant.ACCOUNT_NOT_FOUND);
        }

        // too 密码加密验证
        String key = playFairUtil.Encryption(PlayFairKey.KEY, user.getPass());
        // 2、密码错误
        if (!key.equals(u.getPass())) {
            throw new PasswordErrorException(MessageConstant.PASSWORD_ERROR);
        }

        // 3、账号锁定
        if (Integer.valueOf(u.getStatus()) == 0) {
            throw new AccountLockedException(MessageConstant.ACCOUNT_LOCKED);
        }
        return u;
    }

4、Controller层

	@PostMapping("/login")
    @ApiOperation("用户登录")
    public Result<UserLoginVO> login(User user) {
        log.info("用户登录(邮箱):{}", user.getEmail());

        User u = userService.login(user);

        //登录成功后,生成jwt令牌
        Map<String, Object> claims = new HashMap<>();
        claims.put(JwtClaimsConstant.EMP_ID, u.getId());
        String token = JwtUtil.createJWT(
                jwtProperties.getAdminSecretKey(),
                jwtProperties.getAdminTtl(),
                claims);
        log.info("jwt令牌:{}", token);

        UserLoginVO userLoginVO = UserLoginVO.builder()
                .id(u.getId())
                .userName(u.getName())
                .image(u.getImage())
                .token(token)
                .build();

        return Result.success(userLoginVO);
    }

5、View层

  • AccountNotFoundException
    【Web开发技术】异常处理机制的使用_第5张图片
  • PasswordErrorException
    【Web开发技术】异常处理机制的使用_第6张图片
  • AccountLockedException
    【Web开发技术】异常处理机制的使用_第7张图片
  • FileException
    【Web开发技术】异常处理机制的使用_第8张图片

你可能感兴趣的:(Android开发,Java,java,jvm)