Spring Cloud Contract:在Contract DSL中导入重复部分的首选方法

时间:2020-09-04 14:31:41

标签: spring-cloud spring-cloud-contract

在为API编写合同时,我发现自己一遍又一遍地重复同样的事情。例如,需要复制粘贴复杂json对象的正则表达式验证。 那很乏味而且不是很干。

我正在使用Kotlin DSL和Maven

我试图将公共部分提取到另一个文件中以重复使用。 (Kotlin扩展函数为ftw。)

尝试了多种方法以重用该文件后,我放弃了。

公共部分应尽可能接近实际合同。我不想将它们导出到另一个项目中,并单独构建它们,因为它们是合同的重要组成部分。

我尝试了以下方法:

  1. 只是将文件放在同一目录中并导入函数,希望可以像在Java中那样解决它-根本不起作用(我的期望很低,值得一试)
  2. 将其放入另一个Maven模块中,并将其作为依赖项添加到spring-cloud-contract-maven-plugin中。只要相关模块已在本地Maven存储库中构建并安装,该命令就可以正常工作。如果没有可用的内置版本,maven将无法解决。
  3. 使用Kotlin脚本@file:DependOnusing 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, 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; } } } 进行实验以解决我的问题,没有运气。

我错过了另一种方式吗?有没有这样做的首选方式? 这一定是一个常见问题,对吧?

1 个答案:

答案 0 :(得分:0)