Heim >Backend-Entwicklung >Golang >Abrufen der ValidationException von Dynamodb in Golang

Abrufen der ValidationException von Dynamodb in Golang

王林
王林nach vorne
2024-02-14 21:30:101325Durchsuche

在 Golang 中获取 Dynamodb 的 ValidationException

In Golang kann es bei der Interaktion mit Dynamodb manchmal zu einem ValidationException-Fehler kommen. Dieser Fehler bedeutet normalerweise, dass die angeforderten Daten nicht den Einschränkungen der Dynamodb-Tabelle entsprechen. In diesem Artikel stellen wir vor, wie Sie mithilfe des PHP-Editors Zimo den ValidationException-Fehler von Dynamodb in Golang erhalten, und stellen Lösungen zur reibungslosen Behandlung solcher Fehler bereit. Egal, ob Sie Anfänger oder erfahrener Entwickler sind, dieser Artikel wird Ihnen helfen. Lassen Sie uns herausfinden, wie wir mit diesem häufigen Fehler umgehen können!

Frageninhalt

Ich habe ein Muster wie dieses gemacht~

type movie struct {
    year         int    `json:"year"`
    title        string `json:"title"`
    key          string `json:"userid"`
    email        string `json:"email"`
    bio          string `json:"bio"`
    number       int    `json:"phonenumber"`
    socialhandle string `json:"socialhandle"`
    onboarding   string `json:"username"`
    bankdetails  string `json:"bankdetails"`
    image        string `json:"image"`
    password     string `json:"password"`
    resume       string `json:"resume"`
    pincode      string `json:"pincode"`
}

Der Schlüssel und das Onboarding hier sind mein Primärschlüssel bzw. mein Sortierschlüssel. Dann habe ich die Daten so hinzugefügt ~

movie := movie{
    key:        "2323",
    onboarding: "the big new movie",
}

Dann habe ich eine normale Marshallmap von etwas erstellt und die Daten verwendet, um die Elemente zu erhalten.

key, err := dynamodbattribute.MarshalMap(movie)
if err != nil {
    fmt.Println(err.Error())
    return
}

input := &dynamodb.GetItemInput{
    Key:       key,
    TableName: aws.String("tablename"),
}

result, err := svc.GetItem(input)
if err != nil {
    fmt.Println(err)
    fmt.Println(err.Error())
    return
}

Das Seltsame ist, dass ich den gleichen Code verwendet habe, um die Daten fast ohne Änderungen einzufügen, aber beim Abrufen der Daten wird der Fehler angezeigt ~validationException: Das angegebene Schlüsselelement stimmt nicht mit dem Schema überein

Umgehungslösung

Dieser Fehler kann darauf zurückzuführen sein to Wird durch das Senden von Nicht-Schlüsselattributen im getitem-Aufruf verursacht. Wenn Sie Marshalmap verwenden, enthält es einen Nullwert für alle anderen Eigenschaften im Schlüsselobjekt.

Sie können den Schlüssel manuell erstellen:

key: map[string]*dynamodb.attributevalue{
  "userid": {
    s: aws.string("2323"),
  },
  "username": {
    s: aws.string("the big new movie"),
  },
},

Oder fügen Sie omitempty zu den Strukturfeldern hinzu, wodurch diese Eigenschaften von der Marshalling-Map ausgeschlossen werden, wenn sie keinen Wert haben:

type Movie struct {
    Year         int    `json:"year,omitempty"`
    Title        string `json:"title,omitempty"`
        [...]
}

Das obige ist der detaillierte Inhalt vonAbrufen der ValidationException von Dynamodb in Golang. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen