芋道源码 back-end 01 自定义包 | 前缀
一、 yudao-spring-boot-starter-web
1. WebProperties.java
package cn.iocoder.yudao.framework.web.config;
public class WebProperties {
//APP 请求访问路径前缀校验
@NotNull(message = "APP API 不能为空")
@Valid
private Api appApi = new Api("/app-api", "**.controller.app.**");
//管理后台访问路径前缀校验
@NotNull(message = "Admin API 不能为空")
@Valid
private Api adminApi = new Api("/admin-api", "**.controller.admin.**");
//✅️自定义请求访问路径前缀校验✅️
@NotNull(message = "Pet API 不能为空")
@Valid
private Api petApi = new Api("/pet", "com.pet.aid.controller.**");
}
2. YudaoWebAutoConfiguration.java
package cn.iocoder.yudao.framework.web.config;
@EnableConfigurationProperties(WebProperties.class)
public class YudaoWebAutoConfiguration {
@Bean
public WebMvcRegistrations webMvcRegistrations(WebProperties webProperties) {
return new WebMvcRegistrations() {
/**
* 构建 prefix → 匹配条件的映射
*/
private Map<String, Predicate<Class<?>>> buildPathPrefixes(WebProperties webProperties) {
AntPathMatcher antPathMatcher = new AntPathMatcher(".");
Map<String, Predicate<Class<?>>> pathPrefixes = Maps.newLinkedHashMapWithExpectedSize(2);
//管理后台请求访问路径
putPathPrefix(pathPrefixes, webProperties.getAdminApi(), antPathMatcher);
//APP 请求访问路径
putPathPrefix(pathPrefixes, webProperties.getAppApi(), antPathMatcher);
//✅️自定义请求访问路径✅️
putPathPrefix(pathPrefixes, webProperties.getPetApi(), antPathMatcher);
return pathPrefixes;
}
};
}
}
3. ApiRequestFilter.java
package cn.iocoder.yudao.framework.web.core.filter;
/**
* 过滤 /admin-api、/app-api 等 API 请求的过滤器
*
* @author 芋道源码
*/
@RequiredArgsConstructor
public abstract class ApiRequestFilter extends OncePerRequestFilter {
protected final WebProperties webProperties;
@Override
protected boolean shouldNotFilter(HttpServletRequest request) {
// 只过滤 API 请求的地址
String apiUri = request.getRequestURI().substring(request.getContextPath().length());
return !StrUtil.startWithAny(apiUri,
//管理后台请求前缀
webProperties.getAdminApi().getPrefix(),
//App应用请求前缀
webProperties.getAppApi().getPrefix(),
//✅️自定义前缀✅️
webProperties.getPetApi().getPrefix());
}
}
二、 Mapper.java
1. YudaoMybatisAutoConfiguration.java
package cn.iocoder.yudao.framework.mybatis.config;
/**
* MyBaits 配置类
*/
@AutoConfiguration(before = MybatisPlusAutoConfiguration.class) // 目的:先于 MyBatis Plus 自动配置,避免 @MapperScan 可能扫描不到 Mapper 打印 warn 日志
//✅️在这里加上自定义的要扫描的Mapper路径✅️
@MapperScan(value = {"${yudao.info.base-package}", "com.pet.aid"}, annotationClass = Mapper.class,
lazyInitialization = "${mybatis.lazy-initialization:false}") // Mapper 懒加载,目前仅用于单元测试
public class YudaoMybatisAutoConfiguration {
//......
}
2. yudao.info.base-package
每个项目的:
- application-unit-test.yaml ✅️
- application.yaml ✅️
三、打印日志
日志文件配置
logging:
level:
# 配置自己写的 MyBatis Mapper 打印日志
cn.iocoder.yudao.module.demo.dal.mysql: debug
//✅️自定义Mapper包名SQL日志路径打印✅️
com.pet.aid.mapper: debug
四、yudao-server未开启模块404配置
package cn.iocoder.yudao.server.controller;
/**
* 默认 Controller,解决部分 module 未开启时的 404 提示。
* 例如说,/bpm/** 路径,工作流
*
* @author 芋道源码
*/
@RestController
@Slf4j
public class DefaultController {
//自定义业务模块
@RequestMapping(value = { "/admin-api/pet/**"})
public CommonResult<Boolean> pet404() {
return CommonResult.error(NOT_IMPLEMENTED.getCode(),
"[IM 即时通讯 yudao-module-pet - 已禁用][参考 https://doc.iocoder.cn/im/build/ 开启]");
}
}
五、Swagger
package cn.iocoder.yudao.framework.swagger.config;
/**
* Swagger 自动配置类,基于 OpenAPI + Springdoc 实现。
*/
public class YudaoSwaggerAutoConfiguration {
public static GroupedOpenApi buildGroupedOpenApi(String group, String path) {
return GroupedOpenApi.builder()
.group(group)
//✅️添加自定义前缀路径✅️
.pathsToMatch("/admin-api/" + path + "/**", "/app-api/" + path + "/**", "/pet/" + path + "/**")
.addOperationCustomizer((operation, handlerMethod) -> operation
.addParametersItem(buildTenantHeaderParameter())
.addParametersItem(buildSecurityHeaderParameter()))
.addOperationCustomizer(buildOperationIdCustomizer())
.build();
}
}
六、 yudao-server下Bean目录扫描添加自定义包名
package cn.iocoder.yudao.server;
@SuppressWarnings("SpringComponentScan") // 忽略 IDEA 无法识别 ${yudao.info.base-package}
@SpringBootApplication(scanBasePackages = {
//1. yudao-server服务目录
"${yudao.info.base-package}.server",
//2. maven子项目服务
"${yudao.info.base-package}.module",
//3. ✅️自定义模块自定义包名, 避免业务类无法被Spring容器管理✅️
"com.pet.aid"},
excludeName = {
// RPC 相关
// "org.springframework.cloud.openfeign.FeignAutoConfiguration",
// "cn.iocoder.yudao.module.system.framework.rpc.config.RpcConfiguration"
})
public class YudaoServerApplication {
}

浙公网安备 33010602011771号