尚硅谷尚筹网单一架构知识十四Exception处理

9.2 问题解决思路

在这里插入图片描述

9.3 异步请求特点

在这里插入图片描述

9.4 分辨异步请求的工具方法

在atcrowdfunding-admin-3-common工程加入servlet-api依赖

javax.servlet
servlet-api
provided

/**
 * 用于判断一个请求是否是异步请求
 * @param request
 * @return
 */
public static boolean checkAsyncRequest(HttpServletRequest request) {
	
	// 1.获取相应请求消息头
	String accept = request.getHeader("Accept");
	String xRequested = request.getHeader("X-Requested-With");
	
	// 2.判断请求消息头数据中是否包含目标特征
	if(
		(stringEffective(accept) && accept.contains("application/json")) 
		|| 
		(stringEffective(xRequested) && xRequested.contains("XMLHttpRequest")) ) {
		return true;
	}
	
	return false;
}

9.5 升级后的异常处理器


@ControllerAdvice
public class CrowdFundingExceptionResolever {
	
	@ExceptionHandler(value=Exception.class)
	public ModelAndView catchException(
			Exception exception, 
			HttpServletRequest request,
			HttpServletResponse response) throws IOException {
		
		// 1.对当前请求进行检查
		boolean checkAsyncRequestResult = CrowdFundingUtils.checkAsyncRequest(request);
		
		// 2.如果是异步请求
		if(checkAsyncRequestResult) {
			
			// 3.创建ResultEntity对象
			ResultEntity<String> resultEntity = ResultEntity.failed(ResultEntity.NO_DATA, exception.getMessage());
			
			// 4.将resultEntity转换为JSON格式
			Gson gson = new Gson();
			String json = gson.toJson(resultEntity);
			
			// 5.将json作为响应数据返回给浏览器
			response.setContentType("application/json;charset=UTF-8");
			response.getWriter().write(json);
			
			return null;
		}
		
		ModelAndView mav = new ModelAndView();
		
		mav.addObject("exception", exception);
		
		mav.setViewName("system-error");
		
		return mav;
	}

}

9.6 改进提示消息

所在工程:atcrowdfunding-admin-3-common
全类名:com.atguigu.crowd.funding.util.CrowdFundingConstant

public static final Map<String, String> EXCEPTION_MESSAGE_MAP = new HashMap<>();

static {
	EXCEPTION_MESSAGE_MAP.put("java.lang.ArithmeticException", "系统在进行数学运算时发生错误");
	EXCEPTION_MESSAGE_MAP.put("java.lang.RuntimeException", "系统在运行时发生错误");
	EXCEPTION_MESSAGE_MAP.put("com.atguigu.crowd.funding.exception.LoginException", "登录过程中运行错误");
}


9.7 升级后的异常处理器

所在工程:atcrowdfunding-admin-2-component
全类名:com.atguigu.crowd.funding.exeption.CrowdFundingExceptionResolever
@ControllerAdvice
public class CrowdFundingExceptionResolever {
	
	@ExceptionHandler(value=Exception.class)
	public ModelAndView catchException(
			Exception exception, 
			HttpServletRequest request,
			HttpServletResponse response) throws IOException {
		
		// 1.对当前请求进行检查
		boolean checkAsyncRequestResult = CrowdFundingUtils.checkAsyncRequest(request);
		
		// 2.如果是异步请求
		if(checkAsyncRequestResult) {
			
			// 根据异常类型在常量中的映射,使用比较友好的文字显示错误提示消息
			String exceptionClassName = exception.getClass().getName();
			
			String message = CrowdFundingConstant.EXCEPTION_MESSAGE_MAP.get(exceptionClassName);
			
			if(message == null) {
				message = "系统未知错误";
			}
			
			// 3.创建ResultEntity对象
			ResultEntity<String> resultEntity = ResultEntity.failed(ResultEntity.NO_DATA, message);
			
			// 4.将resultEntity转换为JSON格式
			Gson gson = new Gson();
			String json = gson.toJson(resultEntity);
			
			// 5.将json作为响应数据返回给浏览器
			response.setContentType("application/json;charset=UTF-8");
			response.getWriter().write(json);
			
			return null;
		}
		
		ModelAndView mav = new ModelAndView();
		
		mav.addObject("exception", exception);
		
		mav.setViewName("system-error");
		
		return mav;
	}

}

※需要Gson支持

com.google.code.gson
gson
2.8.5

<context:component-scan base-package=“com.atguigu.crowd.funding.handler,com.atguigu.crowd.funding.exeption,com.atguigu.crowd.funding.config”/>

目录: 1.无法添加依赖 2.执行逆向生成操作的 Maven 命令 命令:mybatis-generator:generate。 报错执行不了 3. The import org.springframework.test cannot be resolved 无法导包 4. 运行Junit测试报错java.io.FileNotFoundException: class path resource [mybatis-config.xml] cannot be opened because it:java.io.FileNotFoundException: class path resource [mybatis-config.xml] cannot be opened because it 5.B站看视频如果声音嘈杂,不清楚,小。右键,点击清澈人声。有时候弹幕真牛逼。 6. 看视频第30集,日志系统操作,测试日志时候添加类报错:LoggerFactory cannot be resolved 7,查错需要看控制台的Caused by:后边的内容。 8,测试testTx()报错3,是因为,缺少1这句话。 9. Eclipse如何还原和重置窗口布局复位是reset 10.idea缺少maven导航条 11.idea运行项目,报错404,基本都是Tomcat配置那里两个路劲配置不一致导致的。 12.问题未解决!!!45集测试ssm环境整合,跑不起来 报错: 13 将项目转移到idea中运行,并且进行一些配置修改,将以上12问题解决! 14.更改配置文件,或者有其他更改,最好要在build那里rebuild一下,要不然可能会出一些莫名其妙的错误,这是在用renrenfast框架时候,增加学生,教师等模块,界面一致装,不能正常显示,梦圆教我的。Rebuild后,再重启,即可解决问题。 15.idea加载一个新项目,第一需要调出右侧maven导航条,更新下maven,第二需要在artifact那边的lib里增加maven依赖。这样才能保证依赖和包齐全,项目才能正常运行。这是狂神教的 16.eclipse里边的project相当于idea里边的module。 17. idea 光标变粗如何恢复 18.出现问题:视频63集,无法做出和他一样的页面,HTML变红报错,网页没有按钮 19. 69集管理员登录测试,报400错误 20 问题19的启发,看视频遇到问题的话,那就载看一遍,很有可能是哪里敲错了,导致了问题的出现,好好再检查一遍流程,很多问题基本能够解决。 21 IDEa中Ctrl+f 是在当前这个页面搜索任何想找的代码 22. 70集管理员登录,重定向,报错404 23.最开始这边的弹框弹不出来 24.视频82集,页面显示主体数据,运行项目后,等录出错,出现空白页,控制台也有报错 25.点击用户维护,不想老师那样,出现tom相关信息,button按钮也有问题 26.第87集分页导航条查询有问题 27,95集新增功能,点击页面的新增报404错误 28.视频132,单条删除,无法删除,查看前端代码有报错 29.报500错误,说utf-8啥的, 30.给管理员添角色,左侧未添加列表为空,然而,视频中的却不为空 31. 177集admin分配role,点击向右添加,保存后报错: 32.jsp文件明明定义了某个函数,但是页面显示不出来,查看console,报错说没有这个函数,这是因为浏览器有缓存的原因,按ctrl+f5强制刷新,然以后在重启服务器即可解决问题。 33.感觉debug自己还不会,这是一项必备的技能,后边有必要在B站上搜索下debug教程看看。 34.在pom中加入依赖,在web.xml中增加配置后,需要在右侧maven导航条刷新,在上方artifact那边添加library,类里边如果导包不成功,那么重启idea就好了 35. p247运行项目直接报错: 36.老师讲要会看异常,后台框架里的异常,一般是后一个异常导致了前一个异常,所以看异常要最先看最后一个causeby:往往最后这个能解决99%问题。还有1%是xml文件写错了。 37. 252集测试2,我的roleOperator无法显示内容 38. 285集yml文件读取,测试test遇到找不到类异常 以下为解决办法: 39 288集spring整合mybaitis报错 40.项目看到290集,需要用到Redis,所以暂停项目学习,转入Redis学习。 41.Idea如何同时运行多个项目:点击edit configuration,然后如下图,报错即可,只要端口号不重复,就可以运行多个项目。 42. 重要错误parent的版本号对不上报错:Cann
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值