Validieren Sie Eingabefelder mit zwei möglichen Namen
php-Editor Strawberry stellt Ihnen eine Methode zur Validierung von Eingabefeldern vor: Verwenden Sie zwei mögliche Namen zur Validierung. Die Validierung von Eingabefeldern ist ein sehr wichtiger Schritt bei der Entwicklung einer Website oder Anwendung. Durch die Verwendung zweier möglicher Namen können Sie die Sicherheit und Genauigkeit Ihrer Eingabefelder erhöhen. Diese Methode validiert, indem sie den tatsächlichen Namen des Eingabefelds mit einem alternativen Namen vergleicht. Stimmen beide Namen überein, gilt das Eingabefeld als gültig. Diese Überprüfungsmethode vermeidet Probleme, die durch Benutzereingabefehler oder böswillige Eingaben verursacht werden, und bietet einen zuverlässigeren Datenschutz.
Frageninhalt
Ich migriere eine API, die ursprünglich in Python geschrieben wurde. Mit der Python-API können Sie Anfragen in der Form „camelCase“ oder „snake_case“ wie folgt senden:
Das ist erlaubt
<code>{ "someInput": "nice" } </code>
Das ist erlaubt
<code>{ "some_input": "nice" } </code>
Dies geschieht mithilfe einer großartigen Python-Bibliothek: Pydantic
<code>from pydantic import BaseModel def to_camel(string): words = string.split('_') return words[0] + ''.join(word.capitalize() for word in words[1:]) class InputModel(BaseModel): some_input: str class Config: alias_generator = to_camel allow_population_by_field_name = True </code>
Dies ermöglicht die Erstellung von InputModels nach Alias (someInput) oder Feldnamen (some_input). Ich möchte das Gleiche oder ein Äquivalent in Go machen. Ich verwende Gin:
<code>func Routes(router *gin.Engine) { v1 := router.Group("/v1") { v1.POST("/shipments", controllers.ShipmentCreator) } } func ShipmentCreator(ctx *gin.Context) { ResponseController := new(internal.OutputModel) var body domain.ShipmentsInputModel if err := ctx.BindJSON(&body); err != nil { fmt.Println(err) } validate := validator.New() err := validate.Struct(body) if err != nil { var validationErrors validator.ValidationErrors errors.As(err, &validationErrors) for _, validationError := range validationErrors { ResponseController.AddError(internal.ErrorsModel{ Parameter: validationError.Field(), Message: validationError.Error(), }) } ctx.JSON(http.StatusBadRequest, ResponseController) return } </code>
Meine Eingabestruktur sieht so aus:
<code>type ShipmentsInputModel struct { LotId string `json:"lotId" tag:"lot_id" alias:"lot_id" validate:"required"` } </code>
Das funktioniert nicht, wenn meine Eingabe ist:
<code>{ "lot_id": "someLotId" } </code>
Es kehrt zurück:
"message": "Key: 'ShipmentsInputModel.LotId' Error:Field validation for 'LotId' failed on the 'required' tag",
Wie kann ich sowohl camelCase als auch Snake_case akzeptieren?
Problemumgehung
In Go können Sie nicht zwei JSON-Tags gleichzeitig für ein einzelnes Strukturfeld bereitstellen. JSON-Tags werden mithilfe einer einzelnen Zeichenfolge angegeben, die definiert, wie ein Feld gemarshallt (serialisiert zu JSON) oder entmarshallt (deserialisiert von JSON) werden soll. Sie können nicht direkt mehrere Beschriftungen für ein einzelnes Feld in einer Struktur angeben.
Wenn Sie CamelCase und SnakeCase in der JSON-Ausgabe unterstützen müssen, müssen Sie normalerweise eine konsistente Namenskonvention für die Strukturfelder wählen und dann das entsprechende JSON-Markup für alle Felder verwenden.
Es gibt eine clevere Möglichkeit, dies zu tun. Ich hoffe das hilft.
package main import ( "encoding/json" "fmt" ) type ShipmentsInputModel struct { LotID } type LotID struct { LotId string `json:"lotId,omitempty"` Lot_ID string `json:"lot_id,omitempty"` } func (s *ShipmentsInputModel) setLodID(id string) { s.LotId = id s.Lot_ID = id } func main() { shipment := ShipmentsInputModel{} shipment.setLodID("someLotID") // Convert struct to JSON jsonData, err := json.Marshal(shipment) if err != nil { fmt.Println("Error:", err) return } // prints: {"lotId":"someLotID","lot_id":"someLotID"} fmt.Println(string(jsonData)) }
Das obige ist der detaillierte Inhalt vonValidieren Sie Eingabefelder mit zwei möglichen Namen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



In dem Artikel wird erläutert, wie das PPROF -Tool zur Analyse der GO -Leistung verwendet wird, einschließlich der Aktivierung des Profils, des Sammelns von Daten und der Identifizierung gängiger Engpässe wie CPU- und Speicherprobleme.Character Count: 159

OpenSSL bietet als Open -Source -Bibliothek, die in der sicheren Kommunikation weit verbreitet sind, Verschlüsselungsalgorithmen, Tasten und Zertifikatverwaltungsfunktionen. In seiner historischen Version sind jedoch einige Sicherheitslücken bekannt, von denen einige äußerst schädlich sind. Dieser Artikel konzentriert sich auf gemeinsame Schwachstellen und Antwortmaßnahmen für OpenSSL in Debian -Systemen. DebianopensL Bekannte Schwachstellen: OpenSSL hat mehrere schwerwiegende Schwachstellen erlebt, wie z. Ein Angreifer kann diese Sicherheitsanfälligkeit für nicht autorisierte Lesen sensibler Informationen auf dem Server verwenden, einschließlich Verschlüsselungsschlüssel usw.

In dem Artikel werden Schreiben von Unit -Tests in GO erörtert, die Best Practices, Spottechniken und Tools für ein effizientes Testmanagement abdecken.

Dieser Artikel zeigt, dass Mocks und Stubs in GO für Unit -Tests erstellen. Es betont die Verwendung von Schnittstellen, liefert Beispiele für Mock -Implementierungen und diskutiert Best Practices wie die Fokussierung von Mocks und die Verwendung von Assertion -Bibliotheken. Die Articl

In diesem Artikel werden die benutzerdefinierten Typ -Einschränkungen von GO für Generika untersucht. Es wird beschrieben, wie Schnittstellen die minimalen Typanforderungen für generische Funktionen definieren und die Sicherheitstypsicherheit und die Wiederverwendbarkeit von Code verbessern. Der Artikel erörtert auch Einschränkungen und Best Practices

In dem Artikel wird das Reflect -Paket von Go, das zur Laufzeitmanipulation von Code verwendet wird, von Vorteil für die Serialisierung, generische Programmierung und vieles mehr. Es warnt vor Leistungskosten wie langsamere Ausführung und höherer Speichergebrauch, beraten die vernünftige Verwendung und am besten am besten

In diesem Artikel wird die Verwendung von Tracing -Tools zur Analyse von GO -Anwendungsausführungsfluss untersucht. Es werden manuelle und automatische Instrumentierungstechniken, den Vergleich von Tools wie Jaeger, Zipkin und Opentelemetrie erörtert und die effektive Datenvisualisierung hervorheben

In dem Artikel werden mit Tabellensteuerungstests in GO eine Methode mit einer Tabelle mit Testfällen getestet, um Funktionen mit mehreren Eingaben und Ergebnissen zu testen. Es zeigt Vorteile wie eine verbesserte Lesbarkeit, verringerte Vervielfältigung, Skalierbarkeit, Konsistenz und a
