如何解决Spring Cloud Contract:在Contract DSL中导入重复部分的首选方法
在为API编写合同时,我发现自己一遍又一遍地重复同样的事情。例如,需要复制粘贴复杂json对象的正则表达式验证。 那很乏味而且不是很干。
我正在使用Kotlin DSL和Maven
我试图将公共部分提取到另一个文件中以重复使用。 (Kotlin扩展函数为ftw。)
尝试了多种方法以重用该文件后,我放弃了。
公共部分应尽可能接近实际合同。我不想将它们导出到另一个项目中,并单独构建它们,因为它们是合同的重要组成部分。
我尝试了以下方法:
- 只是将文件放在同一目录中并导入函数,希望可以像在Java中那样解决它-根本不起作用(我的期望很低,值得一试)
- 将其放入另一个Maven模块中,并将其作为依赖项添加到spring-cloud-contract-maven-plugin中。只要相关模块已在本地Maven存储库中构建并安装,该命令就可以正常工作。如果没有可用的内置版本,maven将无法解决。
- 使用Kotlin脚本
@file:DependOn
和using System; using System.Collections.Generic; using System.IO; using System.Threading.Tasks; using Microsoft.Azure.Storage; using Microsoft.Azure.Storage.Blob; namespace ListLastModificationOnBlob { class Program { static void Main(string[] args) { MainAsync().Wait(); } static async Task MainAsync() { string storageAccount_connectionString = @"Your connection string"; // Retrieve storage account from connection string. CloudStorageAccount storageAccount = CloudStorageAccount.Parse(storageAccount_connectionString); // Create the blob client. CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); var containers = await ListContainersAsync(blobClient); foreach (var container in containers) { Console.WriteLine(container.Name); try { //root directory CloudBlobDirectory dira = container.GetDirectoryReference(string.Empty); //true for all sub directories else false var rootDirFolders = dira.ListBlobsSegmentedAsync(true,BlobListingDetails.Metadata,null,null).Result; using (var w = new StreamWriter($"{container.Name}.csv")) { foreach (var blob in rootDirFolders.Results) { if (blob is CloudBlob blockBlob) { var time = blockBlob.Properties.LastModified; var created = blockBlob.Properties.Created; var line = $"{blockBlob.Name},{created},{time}"; await w.WriteLineAsync(line); await w.FlushAsync(); } } } } catch (Exception e) { // Block of code to handle errors Console.WriteLine("Error",e); } } } private static async Task<IEnumerable<CloudBlobContainer>> ListContainersAsync(CloudBlobClient cloudBlobClient) { BlobContinuationToken continuationToken = null; var containers = new List<CloudBlobContainer>(); do { ContainerResultSegment response = await cloudBlobClient.ListContainersSegmentedAsync(continuationToken); continuationToken = response.ContinuationToken; containers.AddRange(response.Results); } while (continuationToken != null); return containers; } } }
进行实验以解决我的问题,没有运气。
我错过了另一种方式吗?有没有这样做的首选方式? 这一定是一个常见问题,对吧?
解决方法
的文档中对此进行了描述
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。