用SpringCloud Alibaba搭建属于自己的微服务(十)~基础搭建~自定义异常、统一结果集和全局异常处理器

一.自定义异常体系

1.背景

在业务代码的开发中,往往会有这种情况,代码逻辑走到某一步,通过if的判断发现程序的逻辑无法继续往下面走了,否则会有一定的问题,这时候我们需要抛出异常组织程序往下进行,快速响应这个请求,并且回滚事物,这就是我们的自定义异常体系.

2.设计

如何设计自定义异常体系,需要我们对自身系统的业务有一定的了解,例如一个商城,可能会有以下的自定义异常.

异常 场景
OrderException.class 订单业务发生异常
PayException.class 支付业务发生异常
GoodsException.class 商品业务发生异常

我们这里不做如何详细的异常体系设计,暂时只区分客户端异常,服务端异常.
(1)代码
CcmMallException.java

package com.ccm.common.exception;

/**
 *  @Description 自定义异常超类
 *  @Author ccm
 *  @CreateTime 2020/07/10 14:35
 */
public class CcmMallException extends RuntimeException {
   
}

CustomerException .java

package com.ccm.common.exception;

import lombok.Getter;

/**
 * @Description 客户端异常
 * @Author ccm
 * @CreateTime 2020/7/10 14:40
 */
@Getter
public class CustomerException extends CcmMallException {
   

    private CodeEnum codeEnum;  //状态码
    private String errorMessage;  //错误详细信息

    public CustomerException(String errorMessage) {
   
       this.codeEnum = CodeEnum.ILLEGAL_REQUEST;
       this.errorMessage = errorMessage;
    }

    public CustomerException(CodeEnum codeEnum, String errorMessage) {
   
        this.codeEnum = codeEnum;
        this.errorMessage = errorMessage;
    }
}

ServerException.java

package com.ccm.common.exception;


import lombok.Getter;

/**
 *  @Description 服务端异常
 *  @Author ccm
 *  @CreateTime 2020/07/10 14:43
 */
@Getter
public class ServerException extends CcmMallException {
   
    private CodeEnum codeEnum;  //状态码
    private String errorMessage;  //错误详细信息

    public ServerException(String errorMessage) {
   
        this.codeEnum = CodeEnum.SYSTEM_INNER_ERROR;
        this.errorMessage = errorMessage;
    }

    public ServerException(CodeEnum codeEnum, String errorMessage) {
   
        this.codeEnum = codeEnum;
        this.errorMessage = errorMessage;
    }
}

二.统一结果集

1.common包里加入Reultset类,提供构造统一结果集的静态方法

package com.ccm.common.exception.result;

import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.extern.slf4j.Slf4j;

import java.util.Date;

/**
 * @Description 统一结果集
 * @Author ccm
 * @CreateTime 2020/7/14 17:36
 */
@Slf4j
@Getter
@ToString
public class ResultSet<T> {
   
    private Integer code; //状态码

    private String codeMessage; //状态码信息

    @Setter
    private String errorMessage;   //前后端对接错误信息

    @Setter
    private String errorMessageToUser; //给用户看的错误信息

    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss:SSS",timezone = "GMT+8")   //jackson指定时间转换格式
    @JSONField(format="yyyy-MM-dd HH:mm:ss:SSS")    //fastjson指定时间转换格式
    private Date timestamp = new Date();

    @Setter
    private T data; //响应数据

    //私有构造器
    private ResultSet() {
   }

    //响应成功,无响应数据
    public static ResultSet success() {
   
        ResultSet resultSet = new ResultSet();
        resultSet.code = CodeEnum.SUCCESS.getCode();
        resultSet.codeMessage = CodeEnum.SUCCESS.getCodeMessage();
        return resultSet;
    }

    //响应成功,有响应数据
    public static <T> ResultSet<T> success(T data) {
   
        ResultSet resultSet = new ResultSet();
        resultSet.code = CodeEnum.SUCCESS.getCode();
        resultSet.codeMessage = CodeEnum.
  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。依托 Spring Cloud Alibaba,您只需要添加一些注解和少量配置,就可以将 Spring Cloud 应用接入阿里微服务解决方案,通过阿里中间件来迅速搭建分布式应用系统。 主要功能服务限流降级:默认支持 WebServlet、 WebFlux, OpenFeign、 RestTemplate、 Spring CloudGateway, Zuul, Dubbo 和 RocketMQ 限流降级功能的接入,可以在运行时通过控制台实时修改限流降级规则,还支持查看限流降级 Metrics 监控。服务注册与发现:适配 Spring Cloud 服务注册与发现标准,默认集成了 Ribbon 的支持。分布式配置管理:支持分布式系统中的外部化配置,配置更改时自动刷新。消息驱动能力:基于 Spring Cloud Stream 为微服务应用构建消息驱动能力。分布式事务:使用 @GlobalTransactional 注解, 高效并且对业务零侵入地解决分布式事务问题。阿里云对象存储:阿里云提供的海量、安全、低成本、高可靠的云存储服务。支持在任何应用、任何时间、任何地点存储和访问任意类型的数据。分布式任务调度:提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。同时提供分布式的任务执行模型,如网格任务。网格任务支持海量子任务均匀分配到所有Worker(schedulerx-client)上执行。阿里云短信服务:覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建客户触达通道

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值