亿级高并发电商项目– 实战篇 –万达商城项目 四(Dashboard服务、设置统一返回格式与异常处理、Postman测试接口 )

 

 

  

专栏:高并发—前后端分布式项目 

👏作者简介:大家好,我是小童,Java开发工程师,CSDN博客博主,Java领域新星创作者
📕系列专栏:前端、Java、Java中间件大全、微信小程序、微信支付、若依框架、Spring全家桶
📧如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步👀
🔥如果感觉博主的文章还不错的话,请👍三连支持👍一下博主哦
🍂博主正在努力完成2023计划中:以梦为马,扬帆起航,2023追梦人 

 IDEA开启Dashboard

普通的IDEA面板只能管理一个服务,而分布式项目中,服务非常多,开启Dashboard可以更方便的管理服务。

在项目路径中的 .idea/workspace.xml 中添加

<component name="RunDashboard">
    <option name="ruleStates">
        <list>
            <RuleState>
                <option name="name" value="ConfigurationTypeDashboardGroupingRule" />
            </RuleState>
            <RuleState>
                <option name="name" value="StatusDashboardGroupingRule" />
            </RuleState>
        </list>
    </option>
    <option name="configurationTypes">
        <set>
            <option value="SpringBootApplicationConfigurationType" />
        </set>
    </option>
</component>

效果如下: 

 

设置统一返回格式 

在前后端分离的项目中,为了方便前后端交互,后端往往需要给前端返回固定的数据格式,但不同的实体类返回格式不同,所以在真实开发中,我们将所有API接口设置返回统一的格式。

 

1、在通用模块创建统一返回结果实体类 

/**
* 统一结果集返回结果
*/
@Data
@AllArgsConstructor
public class BaseResult<T> {
    // 状态码(成功:200 失败:其他)
    private Integer code;
    // 提示消息
    private String message;
    // 返回数据
    private T data;
    // 构建成功结果
    public static <T> BaseResult<T> ok() {
        return new BaseResult(CodeEnum.SUCCESS.getCode(),CodeEnum.SUCCESS.getMessage(), null);
   }
    // 构建带有数据的成功结果
    public static <T> BaseResult<T> ok(T data) {
        return new BaseResult(CodeEnum.SUCCESS.getCode(),CodeEnum.SUCCESS.getMessage(), data);
  }
}
/**
* 返回状态码枚举类
*/
@Getter
@AllArgsConstructor
public enum CodeEnum {
    // 正常
    SUCCESS(200, "OK");
    private final Integer code;
    private final String message;
}

2、修改API模块的控制器方法,所有方法都返回 BaseResult 对象

/**
* 品牌
*/
@RestController
@RequestMapping("/brand")
public class BrandController {
    // 远程注入
    @Reference
    private BrandService brandService;
    /**
     * 根据id查询品牌
     *
     * @param id 品牌id
     * @return 查询结果
     */
    @GetMapping("/findById")
    public BaseResult<Brand> findById(Long id) {
        Brand brand = brandService.findById(id);
        return BaseResult.ok(brand);
   }
}

 

 统一异常处理

在前后端分离项目中,系统抛出异常时,不论是自定义异常还是程序异常,都要返回给前端一段JSON数据,以便其对用户进行提示, 且JSON数据的格式和正常结果相同。

 

接下来我们在 通用模块 为整个项目做统一异常处理: 

1、创建自定义异常类 

/**
* 自定义业务异常
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class BusException extends
RuntimeException implements Serializable {
    // 状态码(成功:200,失败:其他)
    private Integer code;
    // 异常信息
    private String message;
    public BusException(CodeEnum codeEnum)
   {
        this.code = codeEnum.getCode();
        this.message = codeEnum.getMessage();
   }
}

2、创建统一异常处理器

// 统一异常处理器
@RestControllerAdvice
public class GlobalExceptionHandler {
    // 处理业务异常
    @ExceptionHandler(BusException.class)
    public BaseResult defaultExceptionHandler(HttpServletRequest req, HttpServletResponse resp,BusException e) {
        BaseResult baseResult = new BaseResult(e.getCode(),e.getMessage(),null);
        return baseResult;
   }
    // 处理系统异常
    @ExceptionHandler(Exception.class)
    public BaseResult defaultExceptionHandler(HttpServletRequest req, HttpServletResponse resp, Exception e) {
        e.printStackTrace();
        BaseResult baseResult = new BaseResult(CodeEnum.SYSTEM_ERROR.getCode(),CodeEnum.SYSTEM_ERROR.getMessage(),null);
        return baseResult;
   }
}

3 让所有项目都可以加载全局异常处理类,在通用模块创建文件

resources > META-INF > spring.factories ,添加如下内容:

# 启动时自动扫描全局异常处理类
org.springframework.boot.autoconfigure.Ena
bleAutoConfiguration=com.itbaizhan.shoppin
g_common.exception.GlobalExceptionHandler

 4、修改返回状态码枚举类

/**
* 返回状态码枚举类
*/
@Getter
@AllArgsConstructor
public enum CodeEnum {
    // 正常
    SUCCESS(200, "OK"),
    // 系统异常
    SYSTEM_ERROR(500, "系统异常"),
    // 业务异常
    PARAMETER_ERROR(601, "参数异常");

    private final Integer code;

    private final String message;
}

5、修改品牌服务代码

@Service
public class BrandServiceImpl implements BrandService {
    @Autowired
    private BrandMapper brandMapper;
    /**
     * 根据id查询品牌
     */
    public Brand findById(Long id){
        if (id == 0){
            int i = 1/0; // 模拟系统异常
       }else if (id == -1){
            throw new BusException(CodeEnum.PARAMETER_ERROR); // 模拟业务异常
       }
        return brandMapper.selectById(id);
   }
}

6、分别访问

   http://localhost:8001/brand/findById?id=1,
   http://l ocalhost:8001/brand/findById?id=0,
   http://localhost:8001/b rand/findById?id=-1

查看返回结果

Postman测试接口 

1、双击安装包安装Postman

2、创建请求集合

3、添加请求

4、保存请求到集合,以后可以随时发送该请求 

 

 

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注