当前位置: 首页 > news >正文

亿级高并发电商项目-- 实战篇 --万达商城项目 四(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 {// 远程注入@Referenceprivate 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 {@Autowiredprivate 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、保存请求到集合,以后可以随时发送该请求 

 

 

http://www.lryc.cn/news/5293.html

相关文章:

  • 为什么这11道JVM面试题这么重要(附答案)
  • 概率统计之概率篇
  • 综合项目 旅游网 【5.旅游线路收藏功能】
  • 【ArcGIS Pro二次开发】(3):UI管理_显示隐藏Tab、Group、Control等控件
  • Spring Boot开发实战——echarts图标填充数据
  • 李达聪老师:互联网时代的B2B品牌如何塑造
  • javaEE 初阶 — 连接管理机制
  • 40个改变你编程技能的小技巧!
  • iTOP3588开发板直连电脑配置方法(无线上网)配置主机IP
  • 压电陶瓷换能器导纳圆图公式推导及匹配
  • 设计模式C++实现11:观察者模式
  • l1和l2接口如何进行编写?一定要掌握这几个元素
  • GAMES101作业7及课程总结(重点实现多线程加速,微表面模型材质)
  • 面试题(二十四)数据结构与算法
  • 【HAL库】STM32CubeMX开发----STM32F407----Uart串口接收空闲中断
  • Qt_文件操作
  • int和Integer有什么区别?
  • Axure 9 收录不同效果的制作过程
  • [Datawhale][CS224W]图神经网络(一)
  • 【Android实现16位灰度图数据转RGB数据并以bitmap格式显示】
  • uni-app②
  • FFmpeg视频处理
  • FreeRTOS任务通知 | FreeRTOS十二
  • CentOS搭建博客typecho
  • 湖南中创教育PMP如何实施风险应对,避免产生投诉
  • Urho3D子系统
  • 无线网络术语总结
  • 海卡和海派有什么区别
  • vue3学习资料整理
  • Linux基础语法进阶版