楼主: dlmxv90851
457 0

Java全栈工程师内附资料文档 [推广有奖]

  • 0关注
  • 0粉丝

硕士生

94%

还不是VIP/贵宾

-

威望
0
论坛币
266 个
通用积分
54.9922
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
1668 点
帖子
98
精华
0
在线时间
65 小时
注册时间
2020-4-17
最后登录
2024-4-26

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
Java全栈工程师内附资料文档
download链接:https://pan.baidu.com/s/1ELSI_ZoDQKWa1k9lwTb1wg?pwd=uhmv
提取码:uhmv
--来自百度网盘超级会员V5的分享
SpringBoot-全局异常处置
背景
在 Web 开发中, 我们经常会需求处置各种异常, 这是一件棘手的事情, 需求思索以下几个问题 :

什么时分需求捕获 ( try-catch ) 异常, 什么时分需求抛出 ( throws ) 异常到上层 ?
在 dao 层捕获还是在 service 捕获, 还是在 controller 层捕获 ?
抛出异常后要怎样处置. 怎样返回给页面错误信息 ?

全局异常处置
引荐做法

不要在业务代码中停止捕获异常, 即 dao, service, controller 层的一切异常都全部抛出到上层. 这样不会招致业务代码中的一堆 try-catch 招致业务代码紊乱.
哪一层都不捕获.
返回统一的结果集 ( 错误码 + 错误描绘 ).

通常会将事务配置在 Service 层, 当数据库操作失败时, 让 Service 层抛出运转时异常, 而不停止 try-catch 处置,  Spring 事物管理器就会停止回滚. 为了事务回滚
但 Service 层抛出后. 在 Controller 层就需求 try-catch 去捕获异常, 否则会返回原生错误信息到客户端. 但是, 假如在 Controller 层的每个办法体里面都写一些模板化的 try-catch 的代码, 代码不但不美观, 也增加了维护的难度, 特别是还需求对 Service 层的不同异常停止不同处置的时分.
@ControllerAdvice 注解是 Spring 3.2 中新增的. 用于拦截全局的 Controller 的异常. 留意:该注解只能拦截 Controller 不能拦截 Interceptor 的异常.
全局异常处置的步骤

在 SpringMVC / SpringBoot 项目中, 只需求运用 AOP 编写一个全局的异常处置切面类, 用它来统一处置一切的异常即可.
定义一个类, 在类上添加 @ControllerAdvice+@ExceptionHandler注解, 同时需求运用 @ResponseBody 注解表示返回值为 JSON 字符串.

全局异常处置-实例
在 Github 上的代码地址:
github.com/SanJingYe88…
① 运用统一的返回值
在 Controller 层的返回值只要两种, 一种是 Result 作为非分页恳求的返回值, 一种是 PageResult 作为分页恳求的返回值.

Result 非分页恳求, 返回结果实体类.
PageResult 分页恳求, 返回结果实体类.

② 全局异常错误
编写一个 CodeMsg 全局异常错误码实体类. 将错误码集中管理, 然后经过 Result.error(CodeMsg codeMsg) 这种方式调用, 将业务错误码直接传回前端. 并且错误码能够随意扩展.
③ 自定义异常类

ServiceException 自定义业务异常类. 经过组合, 内部维持一个 CodeMsg 的援用, 在业务层对异常停止实例化并抛出, 让切面 GlobalExceptionHandler 捕获处置. ServiceException
CheckException 自定义参数校验异常类.

④ 校验工具类
能够创立校验工具类来对常用的校验做统一抽取, 还能够停止 i18n 国际化显现音讯. 这里是我们本人手动编写了校验工具类, 还能够运用 Guava 提供的 Preconditions 类.
⑤ 全局异常处置类
编写 GlobalExceptionHandler 全局异常处置类. 对业务层传输来的异常做判别, 经过 Result.error(ex.getCodeMsg()) 对不同类型的异常统一返回.

@ControllerAdvice 注解, 在类上运用, 表示该类为全局异常处置类, 当 Controller 层抛出异常时调用.
@ExceptionHandler 注解, 在办法上运用, 表示该办法在发作何品种型异常时会被调用. 由该注解的 value 属性决议.

全局异常处置不生效的可能缘由

被 Swagger自带的注解影响到了,RequestMapping 注解,一定要放在 Swagger 相关注解的前面。

多模块工程,全局异常处置器没有被 Sping 扫描到,所以无法处置。


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Java 工程师 jav controller Conditions

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加JingGuanBbs
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-5 03:02