Mengendalikan kemas kini separa PATCH apabila kunci tidak wujud

王林
Lepaskan: 2024-02-09 15:39:18
ke hadapan
823 orang telah melayarinya

当密钥不存在时处理 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
}
Salin selepas log masuk

imageurl boleh jadi nol, tetapi apabila objek dihantar dari klien:

{ firstName: "Jimmy" }
Salin selepas log masuk

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
}
Salin selepas log masuk
type updateuserdto struct {
    id        uuid.uuid
    firstname string
    lastname  string
    imageurl  optstring
}
Salin selepas log masuk

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
}
Salin selepas log masuk
🎜🎜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!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan