如何使用 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
当我用“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