美文网首页
springboot国际化形式处理restful接口中的mess

springboot国际化形式处理restful接口中的mess

作者: Geroge1226 | 来源:发表于2020-06-17 13:42 被阅读0次

1、背景:

项目中使用到第三方厂商系统接口,他们业务校验message均是以英文形式返回,如:"illegal.coupon.code"。而这样的提示,对C端用户来讲不友好,业务要求映射成中文,前面开发同事,使用暴力转换。类似于此场景均提示用户:"处理失败"。这样方式也不友好,经手项目后,想到用国际化(i18n)方式来处理,如下:

2、步骤

  • 项目resouces下新建Resource Bundle文件,如下:


    image.png

config-message.properties中内容如下:

illegal.coupon.code = 非法的券码
this.coupon.code.has.been.used = 券码已经被使用
this.coupon.code.has.expired = 券码已经过期
this.coupon.has.expired = 券已经过期
this.coupon.has.been.invalidated = 券已经作废
this.coupon.is.binding.now = 券码正在绑定,请勿重复提交
fail.to.bind.coupon.code = 绑定券码失败,请联系客服
find.userCoupon.detail.fail =  查询用户优惠券详情失败
the.receive.coupon.isNull = 转赠失败,转赠券不存在
coupon.refund.failed = 券信息查询失败
this.userCoupon.isNot.handsel.coupon = 非转赠优惠券
this.userCoupon.quantity.isZero = 该转赠券数量为0
this.userCoupon.is.expired = 优惠券已过期
create.userCouponHandselLog.failed =创建会员转赠记录失败
user.coupon.is.not.exists=用户券信息不存在
  • 消息绑定配置
@Configuration
public class ProjectConfig {

    @Bean(value = "configMessage")
    public MessageSource messageSource(){
        ResourceBundleMessageSource  messageSource = new ResourceBundleMessageSource();
        messageSource.setDefaultEncoding("UTF-8");
        // config-message 是 bundle-sourece路径:从source目录下找的
        messageSource.setBasename("config-message");
        return messageSource;
    }
}
  • 全局捕获异常
@Component
@ControllerAdvice
public class GlobalExceptionHandler {

    @Autowired
    @Qualifier("configMessage")
    private MessageSource msgSource;

    @ResponseBody
    @ExceptionHandler(CustomException.class)
    public UniformResultTemplate<Object> handleCustomException(CustomException customException) {
        if (customException == null) {
            return new UniformResultTemplate<>(Code.SYS_ERROR.getCode(), Code.SYS_ERROR.getDesc());
        }
        customException.printStackTrace();
        String message = StringUtils.isEmpty(getMessage(customException.getMsg()))?customException.getMsg():getMessage(customException.getMsg());
        String code = StringUtils.isEmpty(customException.getCode()) ? Code.FAIL.getCode():customException.getCode();
        return new UniformResultTemplate<>(code, message);
    }

    public String getMessage(String message){
        return msgSource.getMessage(message,null, LocaleContextHolder.getLocale());
    }
}
  • 业务使用地方
 if (baseResponse.isSuccess()) {
         returnbaseResponse.getResult();
 } else {
        throw new CustomException(baseResponse.getCode(), baseResponse.getError());
 }
  • 效果:
{
  "code": "10001",
  "message": "券码已经被使用",
  "result": null,
  "totalTimes": null,
  "interfaceTimes": null
}

3、技术原理

后续补...

相关文章

网友评论

      本文标题:springboot国际化形式处理restful接口中的mess

      本文链接:https://www.haomeiwen.com/subject/qexsxktx.html