如何使用 fabric 链代码 return “不允许添加 属性 记录”

how do to with fabric chaincode return “Additional property records is not allowed”

当我用“github.com/hyperledger/fabric-contract-api-go/contractapi”编写链代码时出现错误

type PaginatedQueryResult struct {
   Records             []asset `json:"records"`   
   FetchedRecordsCount int32  `json:"fetchedRecordsCount"`   
   Bookmark            string `json:"bookmark"`   
   Completed           bool   `json:"completed"`
}

当Record为nil时,报错:“asset_transfer_ledger chaincode Value did not match schema:\n 1. return.records: Invalid type. Expected: array, given: null”, then我更新 像这样的 PaginatedQueryResult 结构:

type PaginatedQueryResult struct {
   Records             []asset `json:"records,omitempty" metadata:",optional" `  
   FetchedRecordsCount int32  `json:"fetchedRecordsCount"`   
   Bookmark            string `json:"bookmark"`   
   Completed           bool   `json:"completed"`
}

如果 Records 为 nil,这没问题,但是当 Record 不为 nil 时,会出现错误:“Additional 属性 records is not allowed”

感谢您发布这篇文章,您让我发现了代码中的错误。问题是代码假设 json 标签只是名称,并不期望 ,omitempty 所以元数据模式最终有一个 属性 records,omitempty 所以当记录的值作为有效 属性 在架构中找不到。由于元数据标记会覆盖任何 json 值,因此在修复核心代码之前,现在的解决方案是将名称添加到您的元数据标记以及 JSON,因此您的结构将变为:

type PaginatedQueryResult struct {
   Records             []asset `json:"records,omitempty" metadata:"records,optional" `  
   FetchedRecordsCount int32  `json:"fetchedRecordsCount"`   
   Bookmark            string `json:"bookmark"`   
   Completed           bool   `json:"completed"`
}

请注意,记录在 JSON 标记中用于编组目的和元数据标记。

我在这里为这个问题打开了一个 JIRA:https://jira.hyperledger.org/browse/FABCAG-31