苍穹外卖中的模块总结

打印 上一主题 下一主题

主题 890|帖子 890|积分 2670

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


constant存放常量类,包罗消息常量,状态常量
context是上下文对象,封装了threadlocal
  1. package com.sky.context;
  2. public class BaseContext {
  3.     public static ThreadLocal<Long> threadLocal = new ThreadLocal<>();
  4.     public static void setCurrentId(Long id) {
  5.         threadLocal.set(id);
  6.     }
  7.     public static Long getCurrentId() {
  8.         return threadLocal.get();
  9.     }
  10.     public static void removeCurrentId() {
  11.         threadLocal.remove();
  12.     }
  13. }
复制代码
enumeration存放枚举类
exception存放自定义异常类,用于抛出自定义异常
  1. /**
  2. * 业务异常
  3. */
  4. public class BaseException extends RuntimeException {
  5.     public BaseException() {}
  6.     public BaseException(String msg) {
  7.         super(msg);
  8.     }
  9. }
复制代码
  1. /**
  2. * 账号被锁定异常
  3. */
  4. public class AccountLockedException extends BaseException {
  5.     public AccountLockedException() {
  6.     }
  7.     public AccountLockedException(String msg) {
  8.         super(msg);
  9.     }
  10. }
复制代码
properties用于配置工具类的属性,@ConfigurationProperties(prefix = “sky.alioss”)读取application.yml中以sky.alioss为前缀的具体值
  1. @Component
  2. @ConfigurationProperties(prefix = "sky.alioss")
  3. @Data
  4. public class AliOssProperties {
  5.     private String endpoint;
  6.     private String accessKeyId;
  7.     private String accessKeySecret;
  8.     private String bucketName;
  9. }
复制代码
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

  1. /**
  2. * 配置类,注册web层相关组件
  3. */
  4. @Configuration
  5. @Slf4j
  6. public class WebMvcConfiguration extends WebMvcConfigurationSupport {
  7.     @Autowired
  8.     private JwtTokenAdminInterceptor jwtTokenAdminInterceptor;
  9.     @Autowired
  10.     private JwtTokenUserInterceptor jwtTokenUserInterceptor;
  11.     /**
  12.      * 注册自定义拦截器
  13.      *
  14.      * @param registry
  15.      */
  16.     protected void addInterceptors(InterceptorRegistry registry) {
  17.         log.info("开始注册自定义拦截器...");
  18.         registry.addInterceptor(jwtTokenAdminInterceptor)
  19.                 .addPathPatterns("/admin/**")
  20.                 .excludePathPatterns("/admin/employee/login");
  21.         registry.addInterceptor(jwtTokenUserInterceptor)
  22.                 .addPathPatterns("/user/**")
  23.                 .excludePathPatterns("/user/user/login")
  24.                 .excludePathPatterns("/user/shop/status");
  25.     }
  26.     /**
  27.      * 通过knife4j生成接口文档
  28.      * @return
  29.      */
  30.     @Bean
  31.     public Docket docket1() {
  32.         ApiInfo apiInfo = new ApiInfoBuilder()
  33.                 .title("苍穹外卖项目接口文档")
  34.                 .version("2.0")
  35.                 .description("苍穹外卖项目接口文档")
  36.                 .build();
  37.         Docket docket = new Docket(DocumentationType.SWAGGER_2)
  38.                 .groupName("管理端接口")
  39.                 .apiInfo(apiInfo)
  40.                 .select()
  41.                 .apis(RequestHandlerSelectors.basePackage("com.sky.controller.admin"))
  42.                 .paths(PathSelectors.any())
  43.                 .build();
  44.         return docket;
  45.     }
  46.     @Bean
  47.     public Docket docket2() {
  48.         ApiInfo apiInfo = new ApiInfoBuilder()
  49.                 .title("苍穹外卖项目接口文档")
  50.                 .version("2.0")
  51.                 .description("苍穹外卖项目接口文档")
  52.                 .build();
  53.         Docket docket = new Docket(DocumentationType.SWAGGER_2)
  54.                 .groupName("用户端接口")
  55.                 .apiInfo(apiInfo)
  56.                 .select()
  57.                 .apis(RequestHandlerSelectors.basePackage("com.sky.controller.user"))
  58.                 .paths(PathSelectors.any())
  59.                 .build();
  60.         return docket;
  61.     }
  62.     /**
  63.      * 设置静态资源映射
  64.      * @param registry
  65.      */
  66.     protected void addResourceHandlers(ResourceHandlerRegistry registry) {
  67.         registry.addResourceHandler("/doc.html").addResourceLocations("classpath:/META-INF/resources/");
  68.         registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
  69.     }
  70.     /**
  71.      * 扩展spring mvc 的消息转换器
  72.      * @param converters
  73.      */
  74.     @Override
  75.     protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
  76.         log.info("扩展消息转换器");
  77.         //创建一个消息转换器对象
  78.         MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
  79.         //为消息转换器设置一个对象转换器,对象转换器可将java对象序列化
  80.         converter.setObjectMapper(new JacksonObjectMapper());
  81.         //将消息转换器添加到converters
  82.         converters.add(0,converter);
  83.     }
  84. }
复制代码
z
  1. public class OssConfiguration {
  2.     @Bean
  3.     @ConditionalOnMissingBean
  4.     public AliOssUtil aliOssUtil(AliOssProperties aliOssProperties) {
  5.         log.info("开始创建阿里云上传文件工具类对象",aliOssProperties);
  6.         return new AliOssUtil(aliOssProperties.getEndpoint(),
  7.                 aliOssProperties.getAccessKeyId(),
  8.                 aliOssProperties.getAccessKeySecret(),
  9.                 aliOssProperties.getBucketName()
  10.         );
  11.     }
  12. }
复制代码
这里用到前面common中提到的AliOssProperties来创建AliOssUtil类
handle用于定义全局异常处理器,处理各个地方抛出的异常
  1. /**
  2. * 全局异常处理器,处理项目中抛出的业务异常
  3. */
  4. @RestControllerAdvice
  5. @Slf4j
  6. public class GlobalExceptionHandler {
  7.     /**
  8.      * 捕获业务异常
  9.      * @param ex
  10.      * @return
  11.      */
  12.     @ExceptionHandler
  13.     public Result exceptionHandler(BaseException ex){
  14.         log.error("异常信息:{}", ex.getMessage());
  15.         return Result.error(ex.getMessage());
  16.     }
  17.     @ExceptionHandler
  18.     public Result exceptionHandler(SQLIntegrityConstraintViolationException ex){
  19.         String msg=ex.getMessage();
  20.         if(msg.contains("Duplicate entry")){
  21.             String[] msgs=msg.split(" ");
  22.             String username=msgs[2];
  23.             return Result.error(username+MessageConstant.ALREADY_EXISTS);
  24.         }else{
  25.             return Result.error(MessageConstant.UNKNOWN_ERROR);
  26.         }
  27.     }
  28. }
复制代码
@RestControllerAdvice:表示这是一个全局异常处理类,会拦截所有 @RestController 或 @Controller 抛出的异常,并将处理效果以 JSON 格式返回给前端。
@ExceptionHandler :是 Spring 框架中用于集中处理异常的焦点注解,它的焦点作用是捕捉并处理控制器(Controller)中抛出的特定异常,返回同一的错误响应。
interceptor用于定义拦截器
task定义定时任务类,与websocket共同使用

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

乌市泽哥

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表