use*_*642 1 java rest spring spring-boot
我正在开发一个框架,该框架具有 Spring Boot Java 层和包含核心逻辑的 C++ 层。C++ 层是模块化的,因此许多具有独特职责和命令的服务共享公共组件,包括命令处理器。命令处理器通过 Thrift RPC 与 Java 层(对于所有服务也是一样)进行通信。
目前,用户通过指定命令名称和参数集,通过 Java 级别的单个executeCommand REST 端点执行命令。
POST http://localhost:8388/framework/executeCommand
JSON 正文 {"commandName": "aCommand", "parameters": {"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 层将为每个命令生成一个端点。
谢谢!
您可以在 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);
}
}
Run Code Online (Sandbox Code Playgroud)
(这CommandService是一个在启动时加载可用命令,然后验证并执行请求的命令的服务)。
然后,您可以运行带有类似请求的命令PUT http://localhost:8080/command/someCommand?param1=value1¶m2=value2
更新
针对明确需求的一些解决方案(动态 REST 控制器创建):
| 归档时间: |
|
| 查看次数: |
3293 次 |
| 最近记录: |