0

我在我的spring-boot项目中使用spring-doc-open-api。在我的rest控制器中,我有两个端点,它们相同,只是参数和requestbody的内容不同。例子:

@PostMapping(value=“/v1/types”,params=“type=typeA)...@PostMapping(value=“/v1/types”,params=“type=typeB)

由于OpenAPI Spec,端点应该是唯一的,并且参数不被视为路径的一部分。所以招摇的ui只显示了一个端点,我猜是按字母顺序排列的第一个端点。

在我的情况下,我的前端团队需要知道在我的api中使用哪些端点。因此,我从执行器中找到了另一种选择,即/mappings端点,它显示了我项目中的每一个端点,即我所需要的。

我的问题是,我需要为每个端点添加一些描述,以描述需要哪些对象以及端点的具体功能。

有没有办法在/actuator/mappings中列出的端点下添加某种描述?

仅供参考:Spring Boot 3.3.0

我使用Swagger API做了很多工作,比如向端点添加一些信息,比如使用@Operation、@APIResponses或@Parameter注释,但使用不同的参数显示相同的端点并没有帮助。

我查看了官方的弹簧启动执行器文档,但没有相关信息。

1答案1

重置为默认值
0

您可以像下面这样使用弹簧防尘套执行器,

在pom.xml中添加依赖项:

<依赖性><groupId>org.springframework.boot</groupId><artifactId>弹簧启动执行器</依赖性>

创建自定义终结点

@组件@端点(id=“custommappings”)公共类CustomMappingsEndpoint{私有最终ApplicationContext ApplicationContext;@自动连线公共CustomMappingsEndpoint(ApplicationContext ApplicationContext){this.applicationContext=应用程序上下文;}@读取操作公共映射<String,Object>customMappings(){Map<String,Object>mappings=new HashMap<>();映射<String,RequestMappingHandlerMapping>allRequestMapbings=applicationContext.getBeansOfType(RequestMappingHandlerMapping.class);for(RequestMappingHandlerMapping handlerMaping:allRequestMapbings.values()){映射<RequestMappingInfo,HandlerMethod>handlerMethods=handlerMapping.getHandlerMethods();for(Map.Entry<RequestMappingInfo,HandlerMethod>Entry:handlerMethads.entrySet()){RequestMappingInfo requestMappingInform=条目.getKey();HandlerMethod handlerMeth=条目.getValue();//从PathPatternsRequestCondition提取路径PathPatternsRequestCondition路径PatternsCondition=requestMappingInfo.getPathPatentersCondition();设置<String>patterns=pathPatternsCondition!=无效的?pathPatternsCondition.getPatternValues():空;if(patterns!=null&&!patterns.isEmpty()){if(isExcludedPath(patterns.iterator().next())){继续;//跳过此路径}}Map<String,Object>endpointInfo=new HashMap<>();endpointInfo.put(“路径”,patterns.iterator().next());endpointInfo.put(“方法”,requestMappingInfo.getMethodsCondition()!=无效的? 请求映射信息.获取方法条件().获取方法():“未知”);endpointInfo.put(“params”,requestMappingInfo.getParamsCondition()!=无效的? requestMappingInfo.getParamsCondition().getExpressions():“未知”);endpointInfo.put(“描述”,handlerMethod.getMethod().getName());mappings.put(handlerMethod.getMethod().getName(),endpointInfo);}}返回映射;}private boolean isExcludedPath(字符串路径){//定义要排除的路径return path.startsWith(“/v3/api-docs”)||path.startsWith(“/v3/api docs.yaml”);//根据需要添加更多路径}

在应用程序中显示自定义终结点。属性

management.endpoints.web.exposion.include=自定义映射

使用以下URL获取有关端点的信息,

http://server:port/context-路径/执行器/自定义映射

输出:

{“method1”:{“path”:“/v1/types”,“methods”:[“POST”],“description”:“method1”,“params”:[{“name”:“type”,“value”:“typeA”,“negated”:false}]},“method2”:{“path”:“/v1/types”,“methods”:[“POST”],“description”:“method2”,“params”:[{“name”:“type”,“value”:“typeB”,“negated”:false}]},“method3”:{“path”“:”/v1/getTypes“,”methods“:[”GET“],”description“:”method3“,”params“:[]}}
2
  • 在这种情况下,我必须手动创建文档,比如内部字典。项目中所有端点的默认端点是/actuator/mappings。这意味着自定义端点/执行器/自定义映射将只显示customMappings()下描述的端点,不是吗?除了swagger ui之外,是否还有其他方式向公众(前端)显示其余API端点,可以支持使用不同参数显示相同的端点(Requestparam)? 评论 6月18日10:59
  • 更新代码以创建在/actuator/custommappings下可见的所有端点的文档 评论 6月19日8:15

您的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策.

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.