hyperledger-fabric - 如何使用 fabric 链代码返回 “Additional property records is not allowed”

标签 hyperledger-fabric hyperledger-chaincode

当我使用“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”,然后我更新 像这样的 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 property 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

关于hyperledger-fabric - 如何使用 fabric 链代码返回 “Additional property records is not allowed”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64442488/

相关文章:

hyperledger-fabric - 使用 Fabric Node SDK 实例化 Chaincode 会出现 API 错误 (404) : manifest for hyperledger/fabric-ccenv:latest not found

java - 实例化 Fabric-samples 的 Java 链码时出错

go - 缺少数据Hyperledger Fabric Chaincode

java - 无法调用链码名称 :"lscc",错误 : transaction returned with failure: Undefined contract method called

docker - 错误 : hyperledger/fabric:make gotools: unrecognized import path "golang.org/x/tools/go/gcexportdata"

performance - Hyperledger Fabric可扩展性

hyperledger-fabric - 如何启用 REST API 以在 Hyperledger Fabric 对等节点中进行交互?

hyperledger-fabric - 无法加入 Hyperledger Fabric 中的 channel

java - 无法从 Java SDK 为 Fabric 中的 BYFN 执行调用事务

hyperledger - super 账本结构中的世界状态持久性