试题

1、 SpringBoot异常的设计的原理

Spring Boot中,支持RestControllerAdvice统一处理异常,在一个请求响应周期当中,如果Controller,Service,Repository出现任何异常,都会被RestControllerAdvice机制所捕获进行统一处理。进行统一异常处理的目的也就是为了将千奇百怪的异常信息转换成用户可识别的错误信息

统一异常拦截器

@RestControllerAdvice

@Slf4jpublic class GlobalExceptionTranslator { }

系统中的两类异常处理

第一类:业务自定义的异常,遇到这种异常,拦截器记录后,将业务异常自己的信息抛出。

@ExceptionHandler(BusinessException.class)

public JSONObject handleError(BusinessException e) {

    log.error("Business Exception {}", getStackTraceAsString(e));

    return error(e);

}

第二类:未定义异常,拦截器负责统一屏蔽原来的异常信息,转为服务器内部异常抛出。

@ExceptionHandler(Throwable.class)

public JSONObject handleError(Throwable undefined) {

    log.error("Internal Server Error {}", getStackTraceAsString(undefined));

    return error(new BusinessException(FAILURE));

}

调用者收到error的结果后,直接显示msg内容为用户可见的错误信息即可。

如何自定义一个业务异常

在业务开发中,通常无需进行Try catch处理,有业务异常直接抛出即可。如果需要定义一类通用的异常,则需要在自己业务模块下新建异常类,继承于 BusinessException

public class PaymentException extends BusinessException {

    //重写构造函数,从而定义该自定义异常的用户可见的错误信息

    public PaymentException() {

        super("支付失败");

    }

}

如何自定义一个框架级异常

在系统框架层面,已经预定义了一些常见的异常类,如:

类名

定义

预置错误信息

PermissionDenyException

用户访问未授权的内容

权限不足

ServiceNotFoundException

调用微服务失败

调用相关服务失败

其他异常

在定义框架级异常时,除了需要编写异常类之外,如需要前端根据error CODE做对应的处理,就可以在ResultCode中增加定义。示例如下:

@Getter

@AllArgsConstructor

public enum ResultCode {

    /**

    * 操作成功

    */

    SUCCESS(HTTP_OK, "操作成功"),

    /**

    * 因程序内部错误操作失败(如不指定,则默认这个异常)

    */

    FAILURE(HTTP_INTERNAL_ERROR, "系统运行异常,请联系管理员"),

    /**

    * 用户访问未授权的内容

    */

    UN_AUTHORIZED(HTTP_UNAUTHORIZED, "权限不足"),

    /**

    * 调用微服务失败

    */

    NOT_FOUND(HTTP_NOT_FOUND, "调用相关服务失败");

    final int code;

    final String msg;

}

一个框架级异常的实现类

public class PermissionDenyException extends BusinessException {

    public PermissionDenyException() {

        super(UN_AUTHORIZED);

    }

}

如需要框架对该异常定义统一的策略,则需要在GlobalExceptionTranslator实现该策略,示例如下:

public class GlobalExceptionTranslator { 

    @ExceptionHandler(NewGlobalException.class)

    public JSONObject handleError(NewGlobalException e) {

        // 这里可以实现自定义的异常策略

        return error(new BusinessException(e.getResultCode(),e.getMessage()));

    }

}

2、 前后端分离开发,日志应该如何进行记录,在出现问题的时候,方便定位问题?

    使用logBack来进行日志记录,并把日志级别由info调制debug

3、 跨域的含义

    跨域,指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器施加的安全限制。所谓同源是指,域名,协议,端口均相同,有一个不同即为跨域。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,265评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,078评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,852评论 0 347
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,408评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,445评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,772评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,921评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,688评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,130评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,467评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,617评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,276评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,882评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,740评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,967评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,315评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,486评论 2 348

推荐阅读更多精彩内容

  • 小编费力收集:给你想要的面试集合 1.C++或Java中的异常处理机制的简单原理和应用。 当JAVA程序违反了JA...
    八爷君阅读 4,578评论 1 114
  • 1 以下属于面向对象的特征的是() 答:面向对象的特征主要是:封装、继承、多态。而多态的实现主要是函数方法的重载和...
    apollooo阅读 6,342评论 1 2
  • 1.下列哪些语句关于内存回收的说明是正确的? (b )A、 程序员必须创建一个线程来释放内存B、内存回收程序负责释...
    悠悠我心_4a00阅读 548评论 0 2
  • 目录本次给大家介绍的是我收集以及自己个人保存一些.NET面试题第二篇简介1.接口2.您在什么情况下会用到虚方法或抽...
    寒剑飘零阅读 1,965评论 0 10
  • 1、面向对象的特征有哪些方面? 答:面向对象的特征主要有以下几个方面: 1)抽象:抽象是将一类对象的共同特征总结出...
    yshenhn阅读 1,154评论 0 8