关于自定义异常写法的若干问题

关于自定义异常写法的若干问题

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回答
好帮手慕小蓝 2022-10-25 13:34:06

同学你好~

1.如果不对getMessage方法进行重写,当调用getMessage方法时,会调用父类的方法。而父类方法中返回的字符串没有被赋值过,即为null值。解决该问题的方法可以是在构造方法中,为父类的detailMessage属性进行赋值,即使用“super(message);”语句。

2.如上一条所说,如果想要被系统自动捕捉异常信息,即message中的值,则必须通过父类Throwable进行处理。而将message中的值传递给Throwable需要使用父类的构造方法逐级向上传递,即使用“super(message);”语句。

所以,同学提供的代码中,是固定的写法,与项目无关。这是使Java虚拟机可以自动获取异常信息的方式。

3.异常信息传递的过程比较复杂,老师这里无法简单的将异常处理和传递的过程进行说明,建议同学翻阅一下源码,例如HandlerExceptionResolver等类。

祝学习愉快~

  • 提问者 程序员叶某 #1
    项目中我们抛出的异常是如何响应到前端中去的
    2022-10-25 14:00:47
  • 好帮手慕小蓝 回复 提问者 程序员叶某 #2

    同学你好,上述第三点中已经对该问题进行了回答。

    异常信息会在Spring内部被解析并且传递,最终通过响应对象传递给前端。

    其过程比较复杂,如果同学有兴趣,可以翻阅一下源码。

    祝学习愉快~

    2022-10-25 14:06:18
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师