国际化全局异常处理

异常处理

为啥要用异常处理?

正常程序处理异常有两种:

1.将错误信息return给前端
2.将错误信息已异常形式抛给前端

return与throw的区别:

当在service层处理业务逻辑的时候,所有的业务的代码都写在当前的service方法中的时候,那么,使用return和throw用起来基本没啥区别
当在service层处理的业务的时候,还需要调用自己封装的方法的时候,那么在封装的方法中return出来的错误信息则还需要经过自己来处理一遍,在返回给前端,这样就增加了很多无用的操作,这时候用throw抛出异常就会便捷很多

统一异常处理

说明:

通常一个web程序在运行过程中,由于用户的操作不当,或者程序的bug,有大量需要处理的异常。其中有些异常是需要暴露给用户的,比如登陆超时,权限不足等等。可以通过弹出提示信息的方式告诉用户出了什么错误。

而这就表示在程序中需要一个机制,去处理这些异常,将程序的异常转换为用户可读的异常。而且最重要的,是要将这个机制统一,提供统一的异常处理。

实现:

新增一个统一异常处理类并且在类上面添加注解 @RestControllerAdvice
然后在类中新建方法,并在方法上面添加注解 @ExceptionHandler(value = Exception.class),该注解中的value属性的值为何种异常,那么就会拦截到这类异常

注:此统一异常只能拦截Controller层的异常

自定义异常

对于需要用户自己捕获处理的异常呢,则需要用自定义异常,对于无需关心的异常,则可以不用使用自定义异常
自定义异常只需继承异常类即可

国际化配置

1.在pom文件中引入jar包

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
<dependency>

2.在resources文件中新增国际化资源文件
3.在spingboot配置文件中配置国际化:

   #国际化配置
  messages:
    basename: i18n/messages #指定message的basename,多个以逗号分隔,如果不加包名的话,默认从classpath路径开始,默认: messages
    cache-seconds: -1  #设定加载的资源文件缓存失效时间,-1的话为永不过期,默认为-1
    encoding: UTF-8
    defaultEncoding: UTF-8  #当根据语言类型查询不到资源时,读取默认资源文件,默认资源文件格式设置

4.注入MessageSource这个bean
5.调用MessageSource中的getMessage方法:
messageSource.getMessage(msgName, null, Locale)
说明:msgName为资源文件中的资源id,Locale为获取哪种语言
另外,spring在国际化中还提供了占位符功能,使用"{0}",使用代码:

MessageFormat format = new MessageFormat(msg, Locale.CHINA);
        Object[] params = {orgMsg};
        String message = format.format(params);

将要替换占位符的字符串用一个数组装起来,然后替换掉占位符,数组下标对应的就是占位符的中括号里的值
6.资源文件格式
msg = 没有这个用户 这个是没有占位符的格式 msg代表后面值的id,后面的值就是要翻译的值
msg = 没有{0}这个用户{1} 这个是有占位符的格式 当你数组里有数据的时候,就会将占位符给替换掉

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值