Rumah > Artikel > pembangunan bahagian belakang > Mengendalikan kemas kini separa PATCH apabila kunci tidak wujud
Editor php di Apple ada di sini untuk berkongsi dengan anda masalah tentang kunci yang tidak wujud semasa memproses beberapa kemas kini. Apabila membuat permintaan PATCH, kadangkala anda menghadapi situasi di mana kunci tidak wujud. Jadi bagaimana kita harus menghadapinya? Dalam artikel ini, kami akan memperkenalkan kaedah dan langkah untuk menyelesaikan masalah ini secara terperinci untuk membantu anda menangani situasi ini dengan lebih baik dan memastikan operasi normal sistem. Mari lihat!
Saya cuba memikirkan cara untuk menyelesaikan masalah ini.
Saya mempunyai jenis user
结构,上面有一些字段。但是,当为 patch 用户调用解码 json 对象时,缺少键会导致值设置为 *nil。对应的数据库属性是 text null
jadi apabila kunci hilang hasilnya akan sentiasa disimpan sebagai nol.
type updateuserdto struct { id uuid.uuid firstname string lastname string imageurl *string }
imageurl
boleh jadi nol, tetapi apabila objek dihantar dari klien:
{ firstName: "Jimmy" }
Ini menyahkod sebagai imageurl
= nil,因为 json 中不存在 imageurl
= nil kerana
map[string]struct{}
而不是我的 dto 检查每个字段是否存在的情况下处理部分更新?
您可以实现自定义json.unmarshaler
来确定是否该字段被完全省略,已提供但其值为 null
Bagaimana saya boleh mengendalikan kemas kini separa tanpa menggunakan map[string]struct{}
dan bukannya dto saya menyemak sama ada setiap medan wujud?
PenyelesaianAnda boleh melaksanakan json.unmarshaler
tersuai untuk menentukan Whether the medan telah ditinggalkan sepenuhnya, telah disediakan tetapi nilainya adalah null
atau nilai bukan null telah disediakan.
type optstring struct { isvalid bool string *string } // if a field with this type has no corresponding field in the // incoming json then this method will not be invoked and the // isvalid flag's value will remain `false`. func (s *optstring) unmarshaljson(data []byte) error { if err := json.unmarshal(data, &s.string); err != nil { return err } s.isvalid = true return nil }
type updateuserdto struct { id uuid.uuid firstname string lastname string imageurl optstring }
https://www.php.cn/link/22f791da07b0d8a2504c2537c560001c
Cara lain yang tidak memerlukan jenis tersuai ialah menetapkan nilai medan go kepada json.decoder
(由 json.unmarshal
nilai lajur pangkalan data semasa
unmarshaling json. Jika json masuk tidak mengandungi medan yang sepadan, maka menggunakan ) tidak akan "menyentuh" medan sasaran.
dto := loadUpdateUserDTOFromDB(conn) if err := json.Unmarshal(data, dto); err != nil { return err }🎜🎜https://www.php.cn/link/cdf49f5251e7b3eb4f009483121e9b64🎜🎜
Atas ialah kandungan terperinci Mengendalikan kemas kini separa PATCH apabila kunci tidak wujud. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!