Spring-Boot Starter 中如何根据配置的路径生成对应的 HTTP 请求处理器?
自己制作的 Spring-Boot Starter,如何实现 当使用方集成了这个 Starter(假定使用方应用存在 Web 环境),根据使用方法在其应用的 properties 文件设置的路径,在其应用中生成一个对应路径的 HTTP 请求处理器。比如希望使用方集成了这个 Starter 后,他的应用就具备了类似于如下 Controller 的功能:
@RestController
public class NoticeController {
@GetMapping("/notice")
public Map<String, Object> notice(@RequestParam String groupId,
@RequestParam String dataId) {
logger.info("get notice, groupId={}, dataId={}", groupId, dataId);
JSONObject notice = new JSONObject(4);
notice.put("groupId", groupId);
notice.put("dataId", dataId);
// 根据 groupId 和 dataId 去查询数据
String detail = getDetailData(groupId, dataId);
notice.put("detail", detail);
return notice;
}
private String getDetailData(String groupId, String dataId) {
return "Hello World!";
}
}
然后假定使用方的应用的域名是 localhost,那么访问 localhost/notice?groupId=testGroup&dataId=testData
其中,"/notice"
这个路径是个示例,这个路径希望是支持自定义的(比如在 application.properties 文件里面,使用方设置属性 notice.path=somePath
)。
所以最终请教大家的问题:在 Spring-Boot Starter 中,如何根据用户指定的路径,生成对应的 HTTP 请求处理器?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
自动配置+扫描你的controller包,不就搞定了
既然已经做 starter 了
那就直接在
@Configuration
的类里@Bean
一个这个 Controller 就可以了已经找到解法。
@GetMapping
(以及其他@RequestMapping
功能的注解),在指定映射路径时,支持使用 EL 表达式 —— 所以解法为指定映射路径时使用 EL 表达式从 properties 文件取值。对于我需要的功能(在 Spring-Boot Starter 中,如何根据用户指定的路径,生成对应的 HTTP 请求处理器),实现流程如下:首先修改上面的 Controller:
其中
GetMapping
中的映射路径换成了 EL 表达式{notice.path}
,即从 properties 文件中取notice.path
对应的值。然后就是大家都熟悉的流程,定义ConfigurationProperties
:定义
Configuration
:NoticeAutoConfiguration
只有当前应用有Web 环境
且配置了notice.path
时才会生效;通过@Import
为来当前应用引入NoticeController
这个组件(当然也可以使用@Bean
来注册)。最后在 META-INF/spring.factories 文件中对
NoticeAutoConfiguration
声明自动配置即可: