苍穹外卖中的模块总结

server/2025/2/25 11:09:33/

本文总结苍穹外卖项目中可复用的通用设计

sky-common

在这里插入图片描述
constant存放常量类,包括消息常量,状态常量
context是上下文对象,封装了threadlocal

package com.sky.context;public class BaseContext {public static ThreadLocal<Long> threadLocal = new ThreadLocal<>();public static void setCurrentId(Long id) {threadLocal.set(id);}public static Long getCurrentId() {return threadLocal.get();}public static void removeCurrentId() {threadLocal.remove();}}

enumeration存放枚举类
exception存放自定义异常类,用于抛出自定义异常

/*** 业务异常*/
public class BaseException extends RuntimeException {public BaseException() {}public BaseException(String msg) {super(msg);}}
/*** 账号被锁定异常*/
public class AccountLockedException extends BaseException {public AccountLockedException() {}public AccountLockedException(String msg) {super(msg);}}

properties用于配置工具类的属性,@ConfigurationProperties(prefix = “sky.alioss”)读取application.yml中以sky.alioss为前缀的具体值

@Component
@ConfigurationProperties(prefix = "sky.alioss")
@Data
public class AliOssProperties {private String endpoint;private String accessKeyId;private String accessKeySecret;private String bucketName;
}

utils封装具体的工具类
result封装返回给前端的响应类
json封装对象映射器(基于jackson将Java对象转为json,或者将json转为Java对象),定制 JSON 与 Java 对象之间的序列化(对象转JSON)和反序列化(JSON转对象)规则

sky-pojo

在这里插入图片描述

entity封装实体类,dto封装前端向后端传递数据的对象,通常是entity中某个类的部分数据,vo封装后端向前端返回数据的对象,按照前端需要的数据格式进行设计

sky-server

在这里插入图片描述
annotationaspect负责springboot的aop切面编程
config用于注册Bean

WebMvcConfiguration

/*** 配置类,注册web层相关组件*/
@Configuration
@Slf4j
public class WebMvcConfiguration extends WebMvcConfigurationSupport {@Autowiredprivate JwtTokenAdminInterceptor jwtTokenAdminInterceptor;@Autowiredprivate JwtTokenUserInterceptor jwtTokenUserInterceptor;/*** 注册自定义拦截器** @param registry*/protected void addInterceptors(InterceptorRegistry registry) {log.info("开始注册自定义拦截器...");registry.addInterceptor(jwtTokenAdminInterceptor).addPathPatterns("/admin/**").excludePathPatterns("/admin/employee/login");registry.addInterceptor(jwtTokenUserInterceptor).addPathPatterns("/user/**").excludePathPatterns("/user/user/login").excludePathPatterns("/user/shop/status");}/*** 通过knife4j生成接口文档* @return*/@Beanpublic Docket docket1() {ApiInfo apiInfo = new ApiInfoBuilder().title("苍穹外卖项目接口文档").version("2.0").description("苍穹外卖项目接口文档").build();Docket docket = new Docket(DocumentationType.SWAGGER_2).groupName("管理端接口").apiInfo(apiInfo).select().apis(RequestHandlerSelectors.basePackage("com.sky.controller.admin")).paths(PathSelectors.any()).build();return docket;}@Beanpublic Docket docket2() {ApiInfo apiInfo = new ApiInfoBuilder().title("苍穹外卖项目接口文档").version("2.0").description("苍穹外卖项目接口文档").build();Docket docket = new Docket(DocumentationType.SWAGGER_2).groupName("用户端接口").apiInfo(apiInfo).select().apis(RequestHandlerSelectors.basePackage("com.sky.controller.user")).paths(PathSelectors.any()).build();return docket;}/*** 设置静态资源映射* @param registry*/protected void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler("/doc.html").addResourceLocations("classpath:/META-INF/resources/");registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");}/*** 扩展spring mvc 的消息转换器* @param converters*/@Overrideprotected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {log.info("扩展消息转换器");//创建一个消息转换器对象MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();//为消息转换器设置一个对象转换器,对象转换器可将java对象序列化converter.setObjectMapper(new JacksonObjectMapper());//将消息转换器添加到convertersconverters.add(0,converter);}}

z

public class OssConfiguration {@Bean@ConditionalOnMissingBeanpublic AliOssUtil aliOssUtil(AliOssProperties aliOssProperties) {log.info("开始创建阿里云上传文件工具类对象",aliOssProperties);return new AliOssUtil(aliOssProperties.getEndpoint(),aliOssProperties.getAccessKeyId(),aliOssProperties.getAccessKeySecret(),aliOssProperties.getBucketName());}
}

这里用到前面common中提到的AliOssProperties来创建AliOssUtil类
handle用于定义全局异常处理器,处理各个地方抛出的异常

/*** 全局异常处理器,处理项目中抛出的业务异常*/
@RestControllerAdvice
@Slf4j
public class GlobalExceptionHandler {/*** 捕获业务异常* @param ex* @return*/@ExceptionHandlerpublic Result exceptionHandler(BaseException ex){log.error("异常信息:{}", ex.getMessage());return Result.error(ex.getMessage());}@ExceptionHandlerpublic Result exceptionHandler(SQLIntegrityConstraintViolationException ex){String msg=ex.getMessage();if(msg.contains("Duplicate entry")){String[] msgs=msg.split(" ");String username=msgs[2];return Result.error(username+MessageConstant.ALREADY_EXISTS);}else{return Result.error(MessageConstant.UNKNOWN_ERROR);}}}

@RestControllerAdvice:表示这是一个全局异常处理类,会拦截所有 @RestController 或 @Controller 抛出的异常,并将处理结果以 JSON 格式返回给前端。
@ExceptionHandler :是 Spring 框架中用于集中处理异常的核心注解,它的核心作用是捕获并处理控制器(Controller)中抛出的特定异常,返回统一的错误响应。
interceptor用于定义拦截器
task定义定时任务类,与websocket配合使用


http://www.ppmy.cn/server/170540.html

相关文章

前端兼容处理接口返回的文件流或json数据

参考文档&#xff1a;JavaScript | MDN 参考链接&#xff1a;Blob格式转json格式&#xff0c;拿到后端返回的json数据_blob转json-CSDN博客 参考链接&#xff1a;https://juejin.cn/post/7117939029567340557 场景&#xff1a;导入上传文件&#xff0c;导入成功&#xff0c;…

podman加速器配置,harbor镜像仓库部署

Docker加速器 registries加速器 [rootlocalhost ~]# cat /etc/redhat-release CentOS Stream release 8 [rootlocalhost ~]# cd /etc/containers/ [rootlocalhost containers]# ls certs.d policy.json registries.conf.d storage.conf oci registries.conf re…

计算机网络————(一)HTTP讲解

基础内容分类 从TCP/IP协议栈为依托&#xff0c;由上至下、从应用层到基础设施介绍协议。 1.应用层&#xff1a; HTTP/1.1 Websocket HTTP/2.0 2.应用层的安全基础设施 LTS/SSL 3.传输层 TCP 4.网络层及数据链路层 IP层和以太网 HTTP协议 网络页面形成基本 流程&#xff1a…

基于eBPF的全栈可观测性系统:重新定义云原生环境诊断范式

引言&#xff1a;突破传统APM的性能桎梏 某头部电商平台采用eBPF重构可观测体系后&#xff0c;生产环境指标采集性能提升327倍&#xff1a;百万QPS场景下传统代理模式CPU占用达63%&#xff0c;而eBPF直采方案仅消耗0.9%内核资源。核心业务的全链路追踪时延从900μs降至18μs&a…

深度学习pytorch之19种优化算法(optimizer)解析

提示&#xff1a;有谬误请指正 摘要 本博客详细介绍了多种常见的深度学习优化算法&#xff0c;包括经典的LBFGS 、Rprop 、Adagrad、RMSprop 、Adadelta 、ASGD 、Adamax、Adam、AdamW、NAdam、RAdam以及SparseAdam等&#xff0c;通过对这些算法的公式和参数说明进行详细解析…

【漫话机器学习系列】101.特征选择法之Lasso(Lasso For Feature Selection)

Lasso 特征选择法详解 1. Lasso 回归简介 Lasso&#xff08;Least Absolute Shrinkage and Selection Operator&#xff0c;最小绝对收缩和选择算子&#xff09;是一种基于 L1 范数正则化的线性回归方法。它不仅能够提高模型的泛化能力&#xff0c;还可以自动进行特征选择&am…

PostgreSQL数据库之pg_dump使用

目录 前言 1. 基础用法 1.1 备份整个数据库到 SQL 文件 2. 备份选项 2.1 仅备份结构&#xff08;不包含数据&#xff09; 2.2 仅备份数据&#xff08;不包含表结构&#xff09; 2.3 备份特定表 2.4 排除特定表 2.5 备份为自定义格式&#xff08;支持压缩和快速恢复&am…

docker下搭建redis集群

1. 环境准备 准备好Linux系统机器&#xff0c;并安装好docker&#xff0c;阅读这篇文章前请先了解清楚docker的基本知识并且会熟悉运用docker的常用命令。学习docker基础知识可以参考这篇博文 安装好并启动docker后就可以开始搭建redis了 2. docker容器下安装redis 本篇文章…