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

news2024/11/28 5:30:41

文章目录

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

一、引言

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

1、应用场景

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

(例)

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

(使用了异常处理机制之后)
在这里插入图片描述

2、语法

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

3、体系

在这里插入图片描述

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

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
    在这里插入图片描述
  • PasswordErrorException
    在这里插入图片描述
  • AccountLockedException
    在这里插入图片描述
  • FileException
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/620539.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JAVA项目代码几乎没有改动,重新发布后突然报错,无法启动

项目场景&#xff1a; 提示&#xff1a;这里简述项目相关背景&#xff1a; JAVA项目代码几乎没有改动&#xff0c;重新发布后突然报错&#xff0c;无法启动 问题描述 提示&#xff1a;这里描述项目中遇到的问题&#xff1a; JAVA项目代码几乎没有改动&#xff0c;重新发布后…

2023年PMP 续证的费用和流程最全介绍

PMP证书并不是终身有效的&#xff0c;是需要三年一续的&#xff0c;PMI会在有效期截止前给持证者发邮件提示换证&#xff08;续证&#xff09;。目前的续证费用为150美金和积满60个PDU&#xff0c;60个PDU是在证书三年有效期内积满就可以&#xff0c;像我的培训机构艾威每周都会…

当Mysql缓慢时,这几招可解燃眉之急

第一步定位问题源&#xff1a; 常见的以查询Mysql性能问题的方法 1.大部分的性能问题都是查询过慢的问题&#xff0c;可以查询慢sql日志。 通过慢查询日志定位那些执行效率较低的SQL语句&#xff0c;用–log-slow-queries[ file_name]选项启动时&#xff0c;mysqld写一个包含所…

售后退换货客服话术

在客服的工作生涯里&#xff0c;售后退换货这种问题&#xff0c;对于我们客服来说可以说是见惯不惯了。今天小编给大家准备了一些退换货的售后回复话术&#xff0c;让大家工作起来更加高效。 一、引导退换货 1.亲&#xff0c;麻烦您收到后请先试穿&#xff0c;请一定要保持衣服…

WordPress入门版,保姆级记录

服务器里用户越近&#xff0c;访问速度越快&#xff0c;所以需要根据用户群体选择合适的服务器 国外网站&#xff1a;SiteGround国内网站&#xff1a;阿里云 bidewang.co/sg WordPress托管服务器页面&#xff0c;一般选择第二个套餐 没有域名则选择购买域名 然后填选购买信息…

007-从零搭建微服务-网关中心(一)

写在最前 如果这个项目让你有所收获&#xff0c;记得 Star 关注哦&#xff0c;这对我是非常不错的鼓励与支持。 源码地址&#xff1a;https://gitee.com/csps/mingyue 文档地址&#xff1a;https://gitee.com/csps/mingyue/wikis 新建 mingyue-gateway 在 【从零搭建微服务…

练习SpringBoot烘培坊项目

烘培坊项目 文章目录 烘培坊项目项目概述项目搭建项目关键代码实现实现首页轮播图实现注册功能实现登录功能实现图片上传稿件管理页面内容列表功能稿件管理页面修改功能稿件管理页面删除功能首页三个类型下的分类展示首页三种类型的内容展示点击查看更多进入列表页面在header里…

mysql waf绕过-WAF Bypass技巧(2)

数据库waf绕过的一些玩法 WAF Bypass技巧(0)_luozhonghua2000的博客-CSDN博客 WAF绕过-WAF Bypass技巧(1)_luozhonghua2000的博客-CSDN博客 数据库特性 第一篇: Mysql数据库特性 0x01 前言 我们经常利用一些数据库特性来进行WAF绕过。在Mysgl中,比如可以这样 位置一: 参数和…

泰坦尼克号幸存者预测

本文所有的代码及数据均存放与https://github.com/MADMAX110/Titanic 泰坦尼克号幸存者预测挑战赛是一个非常受欢迎的机器学习实践项目。这是 Kaggle.com 上最受欢迎的比赛之一。 数据中有3个文件:train.csv&#xff0c;test.csv&#xff0c;和gender_submit .csv。 train.csv包…

内存碎片:理解、应用场景和防止措施

目录 摘要1. 引言2. 内存碎片的概念3. 内存碎片的产生原因4. 应用场景4.1 应用场景一&#xff1a;长时间运行的服务器4.2 应用场景二&#xff1a;嵌入式系统 5. 预防和处理内存碎片6. 示例代码&#xff1a;生成内存碎片7. 总结 摘要 本文旨在向初学者详细介绍内存碎片的概念、…

【爬虫】4.1 Scrapy 框架爬虫简介

目录 1. Scrapy 框架介绍 2. 建立 Scrapy 项目 3. 入口函数与入口地址 4. Python 的 yield 语句 5. Scrapy 爬虫的数据类型 1. Scrapy 框架介绍 1.1 Scrapy 的安装 pip install scrapy -i https://pypi.tuna.tsinghua.edu.cn/simple/ 1.2 Scrapy爬虫框架结构 “52”结构&…

「HTML和CSS入门指南」table 标签详解

什么是 table 标签? 在 HTML 中,table 标签用于创建表格。使用 table 标签可以帮助您以可视化和结构化的方式呈现数据。 table 标签的基本语法 以下是 table 标签的基本语法: <table><tr><th>姓名</th><th>年龄</th><th>性别&l…

chatgpt赋能python:Python如何辨别非数字符号

Python如何辨别非数字符号 在进行数据处理或者字符串操作时&#xff0c;经常会遇到需要识别和处理非数字符号的情况&#xff0c;如何在Python中进行辨别呢&#xff1f; 什么是非数字符号 非数字符号是指数字以外的字符&#xff0c;包括但不限于以下类型&#xff1a; 字母&a…

Drools 规则引擎原理

目录 Drools规则引擎基本定义介绍优劣优点缺点 基本概念规则引擎构成 规则结构规则引擎执行过程规则存储Kie 介绍Kie 相关组件知识库规则引擎与知识库Drools 存储规则的数据结构 Rete 算法原理优缺点优点缺点 举例 前向和后向链推理机制前向链后向链对比 应用场景概念和特点架构…

MMPretrain

title: mmpretrain实战 date: 2023-06-07 16:04:01 tags: [image classification,mmlab] mmpretrain实战 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ccTl9bOl-1686129437336)(null)] 主要讲解了安装,还有使用教程.安装教程直接参考官网.下面讲…

【mmpose】从openmmlab官方文档看mmpose架构设计,模块组成,快速上手实现关键点检测效果(动物,人体,手部等)

MMPOSE 架构设计 MMPose 1.0 与之前的版本有较大改动&#xff0c;对部分模块进行了重新设计和组织&#xff0c;降低代码冗余度&#xff0c;提升运行效率&#xff0c;降低学习难度。使用 MMPose 1.0 时开发者会关心的内容&#xff1a; 整体代码架构与设计逻辑&#xff1b; 如何…

告别加班!9款Figma汉化插件助你高效工作,提升生产力!

Figma是一款极受设计师欢迎的设计工具&#xff0c;而Figma中文版即时设计则是在Figma基础上改进而来&#xff0c;有着众多的Figma汉化插件&#xff0c;可以加速设计工作&#xff0c;让每位设计师完成更好的创作。 打开即时设计官网首页&#xff0c;点击【设计社区】-【插件广场…

虚函数表详解及其应用场景

目录 概述1. 虚函数表概述2. 虚函数表的实现原理2.1. 虚函数的声明和定义2.2. 虚函数表的创建和初始化2.3. 虚函数调用的过程 3. 虚函数表的应用场景3.1. 多态性3.2. 基类指针和引用的使用3.3. 动态绑定3.4. 接口定义 结论 概述 在面向对象编程中&#xff0c;虚函数表&#xf…

java-JDBC

java-JDBC 1. JDBC概念 JDBC 就是使用Java语言操作关系型数据库的一套API 全称&#xff1a;( Java DataBase Connectivity ) Java 数据库连接 sun公司就指定了一套标准接口&#xff08;JDBC&#xff09;&#xff0c;JDBC中定义了所有操作关系型数据库的规则。 我们需要使用接口…

人群聚集监测预警算法 python

人群聚集监测预警系统采用pythonopencv网络模型AI视频智能分析技术&#xff0c;人群聚集监测预警算法对人员聚集情况进行实时监测&#xff0c;当人群聚集过于密集时&#xff0c;系统将自动发出警报。OpenCV基于C实现&#xff0c;同时提供python, Ruby, Matlab等语言的接口。Ope…