Abrufen der ValidationException von Dynamodb in Golang

王林
Freigeben: 2024-02-14 21:30:10
nach vorne
1289 Leute haben es durchsucht

在 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"`
}
Nach dem Login kopieren

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",
}
Nach dem Login kopieren

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
}
Nach dem Login kopieren

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"),
  },
},
Nach dem Login kopieren

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"`
        [...]
}
Nach dem Login kopieren

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!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage