我有一个小型REST服务(由spring制作),现在我正在寻找一种自动为此服务生成模式的解决方案。
在我的研究过程中,我发现了一些类RepositorySchemaController
和PersistentEntityToJsonSchemaConverter
的提示。但我只想生成我的REST服务的JSON模式。为什么我需要弹簧数据呢?在这种情况下,我没有使用任何持久性。
此外,我正在寻找一个可理解的例子来做到这一点。
答案 0 :(得分:2)
通过模式,我猜你的意思是模式的元数据,即所有端点,交换的有效负载结构,路径变量,查询参数。
事实上,有一些格式可以提供有关此问题的结构:
我认为您应该为您的服务“架构”提供一种(或两种)格式的内容。
我看到两种方法:
静态 - 您可以通过内省源代码来生成内容。您可以检测带注释Controller
的类,内省类以查找带注释RequestMapping
的方法,获取参数和返回类以确定有效负载结构等等... Spring提供了一个支持来查找来自基于特定注释的类路径。有关详细信息,请参阅此链接:Scanning Java annotations at runtime。
我认为这种方法是可以接受的,因为当您更新资源或有效负载结构时,需要重新启动应用程序,以便重新生成“模式”。
根据生成的内容,您可以添加特定的Spring控制器来为其提供服务。您可以在此文件上注入Spring Resource
(类路径一)。
动态(运行时) - Spring为您提供包含所有这些提示的类RequestMappingHandlerMapping
。您可以在“模式”控制器中注入它,并使用方法RequestMappingHandlerMapping#getHandlerMethods
的返回来构建内容。有关详细信息,请参阅此链接:How to find all controllers in Spring MVC?。
您可以注意到APISpark(参见本教程http://restlet.com/technical-resources/apispark/tutorials/document-restlet-api)为Restlet应用程序提供了这样的内省机制。这在APISpark平台中添加了一个Web API,然后您就可以获得相应的Swagger2和RAML内容。也许我们可以为Spring MVC / REST应用程序扩展它......
希望它可以帮到你, 亨利