Rumah >pembangunan bahagian belakang >Golang >Mengendalikan kemas kini separa PATCH apabila kunci tidak wujud

Mengendalikan kemas kini separa PATCH apabila kunci tidak wujud

王林
王林ke hadapan
2024-02-09 15:39:18842semak imbas

当密钥不存在时处理 PATCH 部分更新

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!

Kandungan soalan

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

tidak wujud dalam json.

map[string]struct{} 而不是我的 dto 检查每个字段是否存在的情况下处理部分更新?

解决方法

您可以实现自定义json.unmarshaler来确定是否该字段被完全省略,已提供但其值为 nullBagaimana 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.unmarshalnilai lajur pangkalan data semasa

sebelum

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!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam