关于自定义异常写法的若干问题
1.自定义异常中
@Override
public String getMessage() {
return message;
}上面这句话作用是什么?(老师没有写这句话,源代码中有这句话,不写这句话就出错了)
2.自定义异常如何抛出自定义信息?
package com.imooc.reader.service.exception;
public class MemberException extends RuntimeException{
public MemberException(String message){
super(message);
}
}上面是上一个项目的自定义异常,为什么是这种写法,和这个项目的写法有什么区别和联系?
3.为什么前端能够收到如何异常的响应,我们只是抛出了异常,请问错误信息是由哪些方法把这些错误信息通过json格式的数据传递给前端的?
{
"timestamp": "2022-10-25T03:41:29.701+0000",
"status": 500,
"error": "Internal Server Error",
"message": "不允许重名,注册失败",
"path": "/register"
}正在回答 回答被采纳积分+1
同学你好~
1.如果不对getMessage方法进行重写,当调用getMessage方法时,会调用父类的方法。而父类方法中返回的字符串没有被赋值过,即为null值。解决该问题的方法可以是在构造方法中,为父类的detailMessage属性进行赋值,即使用“super(message);”语句。
2.如上一条所说,如果想要被系统自动捕捉异常信息,即message中的值,则必须通过父类Throwable进行处理。而将message中的值传递给Throwable需要使用父类的构造方法逐级向上传递,即使用“super(message);”语句。
所以,同学提供的代码中,是固定的写法,与项目无关。这是使Java虚拟机可以自动获取异常信息的方式。
3.异常信息传递的过程比较复杂,老师这里无法简单的将异常处理和传递的过程进行说明,建议同学翻阅一下源码,例如HandlerExceptionResolver等类。
祝学习愉快~
- 参与学习 人
- 提交作业 8788 份
- 解答问题 9886 个
综合就业常年第一,编程排行常年霸榜,北上广深月薪过万! 不需要基础,无需脱产即可学习,只要你有梦想,想高薪! 全新升级:技术栈升级(包含VUE3.0,ES6,Git)+项目升级(前后端联调与功能升级)
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星