一个或多个参数值无效:商品状态码:400,请求ID:71CT中缺少密钥ID

时间:2019-06-30 20:40:23

标签: amazon-web-services go amazon-dynamodb

我在dynamodb中创建了一个表格“ Blog”。

我想在其中插入要从HTML表单中获取的2个参数“标题” “内容”

当我在控制台中打印这两个参数时,参数“ blogContent” “ blogTitle” 似乎有效。

但是当我将它们插入表中时,出现错误:

  

“一个或多个参数值无效:项目中缺少键ID           状态码:400,请求ID:71CT5IPM1SIDKSDVUGWGUCSJ77VV4KQNSO5ZAMVJF66Q9ASUAAJG”

type Item struct {
    id                 int
    content            string
    bodycontentversion string
    claps              int
    comments           int
    imageid            int
    title              string
    views              int
}


func awsblog() {

    sess, err := session.NewSession(&aws.Config{
        Region: aws.String("us-east-1")},
    )

    svc := dynamodb.New(sess)

    item := Item{
        id:                 1234,
        content:            blogContent,
        bodycontentversion: "abcd",
        claps:              5,
        comments:           10,
        imageid:            1234,
        title:              blogTitle,
        views:              10,
    }

    av, err := dynamodbattribute.MarshalMap(item)
    if err != nil {
        fmt.Println("Got error marshalling new item:")
        fmt.Println(err.Error())
        os.Exit(1)
    }

    tableName := "Blog"

    input := &dynamodb.PutItemInput{
        Item:      av,
        TableName: aws.String(tableName),
    }

    _, err = svc.PutItem(input)
    if err != nil {
        fmt.Println("Got error calling PutItem:")
        fmt.Println(err.Error())
        os.Exit(1)
    }

    fmt.Println("Successfully updated '")
}

enter image description here

2 个答案:

答案 0 :(得分:0)

结构字段必须是公共的,MarshalMap才能发挥作用。

添加一个fmt.Printf("marshalled struct: %+v", av)以查看该函数的输出。

除非您向结构字段添加json:"field-name"指令,否则这将要求DynamoDB字段大写。

结果将是:

type Item struct {
    Id                 int    `json:"id"`
    Content            string `json:"content"`
    Bodycontentversion string `json:"bodycontentversion"`
    Claps              int    `json:"claps"`
    Comments           int    `json:"comments"`
    Imageid            int    `json:"imageid"`
    Title              string `json:"title"`
    Views              int    `json:"views"`
}

答案 1 :(得分:0)

将带有boto3 Python包的物品放进去时,我有同样的错误。

ClientError: An error occurred (ValidationException) when calling the PutItem operation: One or more parameter values were invalid: Missing the key id in the item

问题是插入时我没有正确指定分区键。我在下面错误地指定了PARTITION_KEY。我拼写了错误的变量名(下面的第一行),这导致了错误,但从错误消息中无法立即看到该错误。

PARTTION_KEY = 'hello'
SORT_KEY = 'world'

dynamodb = boto3.client('dynamodb')
dynamodb.put_item(
    TableName=TABLE,
    Item={
        PARTITION_KEY: {'S': 'my-part-key'},
        SORT_KEY: {'S': 'my-sort-key'},
    }
)