Validasi Input
Penjelasan
BEDA dengan Echo/Fiber yang butuh library validator terpisah, Gin punya validasi TERINTEGRASI lewat tag binding: di field struct — otomatis dijalankan SAAT c.ShouldBindJSON() dipanggil, TANPA perlu memanggil fungsi validasi terpisah. Di balik layar, Gin tetap memakai go-playground/validator, cuma sudah terhubung otomatis.
Contoh Konsep
type ProdukRequest struct {
Nama string `json:"nama" binding:"required,min=3"`
Harga float64 `json:"harga" binding:"required,gte=0"`
}
r.POST("/produk", func(c *gin.Context) {
var req ProdukRequest
if err := c.ShouldBindJSON(&req); err != nil {
// error ini SUDAH termasuk pelanggaran validasi, bukan cuma error parsing JSON
c.JSON(422, gin.H{"error": err.Error()})
return
}
c.JSON(201, req)
})
Praktikum
Tambahkan tag binding ke ArtikelRequest: Judul wajib string minimal 5 karakter (binding:"required,min=5"), Isi wajib diisi (binding:"required"). Pastikan c.ShouldBindJSON() sudah otomatis memvalidasinya.
Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.
Tips
Karena validasi Gin sudah terintegrasi di c.ShouldBindJSON(), kamu TIDAK BISA membedakan dari err saja apakah gagal karena JSON-nya malformed ATAU karena data-nya melanggar aturan validasi — kalau butuh membedakan dua kasus itu secara eksplisit, perlu penanganan tambahan (mis. cek tipe error validator.ValidationErrors).