我正在開發一個具有 Spring Boot Java 層和包含核心邏輯的 C 層的框架。C 層是模塊化的,因此許多具有獨特職責和命令的服務共享公共組件,包括命令處理器。命令處理器通過 Thrift RPC 與 Java 層(所有服務也一樣)通信。
目前,用戶通過指定命令名稱和引數集在 Java 級別通過單個 executeCommand REST 端點執行命令。
POST http://localhost:8388/framework/executeCommand
JSON正文{“commandName”:“aCommand”,“引數”:{“param1”:“value1”,“param2”:“value2”}}
有沒有辦法根據 C 層提供的命令集動態生成 REST 端點?例如...每個命令都有一個端點,例如
POST http://localhost:8388/framework/aCommand
JSON 正文 {"parameters": {"param1": "value1", "param2": "value2"}}
或者
獲取 http://localhost:8388/framework/aCommand?param1=value1
例如...在啟動時,Java 層將向 C 層查詢命令集和其他相關資訊,例如適當的 REST 方法。有了這些資訊,Java 層將為每個命令生成一個端點。
謝謝!
uj5u.com熱心網友回復:
您可以在 REST 控制器中使用路徑變數來接受不同的命令型別,如下所示:
@RestController
@RequestMapping("/command")
@RequiredArgsConstructor
class CommandController {
private final CommandService commandService;
@PutMapping("/{commandType}")
public CommandResult handleCommand(@PathVariable("commandType") String commandType,
@RequestParam Map<String, String> params) {
return commandService.execute(commandType, params);
}
}
(這CommandService是一個在啟動時加載可用命令然后驗證并執行請求的命令的服務)。
然后,您可以運行帶有類似請求的命令PUT http://localhost:8080/command/someCommand?param1=value1¶m2=value2
更新
明確要求的一些解決方案(動態 REST 控制器創建):
- https://github.com/tsarenkotxt/poc-spring-boot-dynamic-controller
- 在運行時創建@RestController
- Spring Boot 運行時添加控制器?
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/478005.html
