第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

春季 JPA - 實(shí)體的靜態(tài)部分更新和驗(yàn)證

春季 JPA - 實(shí)體的靜態(tài)部分更新和驗(yàn)證

RISEBY 2022-09-14 16:08:19
我有一個(gè)基于彈簧MVC的簡(jiǎn)單回復(fù)API,使用JPA連接的MySQL數(shù)據(jù)庫(kù)。到目前為止,此 API 僅支持實(shí)體的完整更新。這意味著必須在請(qǐng)求正文中提供所有字段。@ResponseBody@PutMapping(value = "{id}")public ResponseEntity<?> update(@Valid @RequestBody Article newArticle, @PathVariable("id") long id) {    return service.updateById(id, newArticle);}這里真正的問(wèn)題是驗(yàn)證,我如何在創(chuàng)建過(guò)程中仍然需要所有字段時(shí)僅驗(yàn)證提供的字段?@Entitypublic class Article {    @NotEmpty @Size(max = 100) String title;    @NotEmpty @Size(max = 500) String content;    // Getters and Setters}部分更新請(qǐng)求正文(而不是 )的示例。實(shí)際的部分更新是通過(guò)檢查給定字段是否不為空來(lái)完成的:{"content": "Just a test"}{"title": "Title", "content": "Just a test"}if(newArticle.getTitle() != null) article.setTitle(newArticle.getTitle());但驗(yàn)證當(dāng)然是行不通的!我必須停用更新方法的驗(yàn)證才能運(yùn)行 RESTful 服務(wù)。我基本上有兩個(gè)問(wèn)題:如何在更新方法中僅驗(yàn)證屬性的“現(xiàn)有”子集,同時(shí)在創(chuàng)建過(guò)程中仍需要所有字段?有沒(méi)有一種更優(yōu)雅的方法來(lái)部分更新,然后檢查空值?
查看完整描述

1 回答

?
ABOUTYOU

TA貢獻(xiàn)1812條經(jīng)驗(yàn) 獲得超5個(gè)贊

部分更新和Spring JPA的復(fù)雜性在于,您可能會(huì)發(fā)送填充的一半字段,甚至您需要從數(shù)據(jù)庫(kù)中提取整個(gè)實(shí)體,然后只需“合并”實(shí)體和pojo,因?yàn)榉駝t您將通過(guò)向數(shù)據(jù)庫(kù)發(fā)送空值來(lái)冒險(xiǎn)。

但是合并本身有點(diǎn)棘手,因?yàn)槟枰獙?duì)每個(gè)字段進(jìn)行操作,并決定是將新值發(fā)送到數(shù)據(jù)庫(kù)還是僅保留當(dāng)前值。添加字段時(shí),需要更新驗(yàn)證,并且測(cè)試變得更加復(fù)雜。在一句話中:它不會(huì)擴(kuò)展。這個(gè)想法是始終編寫(xiě)對(duì)擴(kuò)展開(kāi)放且對(duì)修改關(guān)閉的代碼。如果添加更多字段,則理想情況下不需要更改驗(yàn)證塊。

在 REST 模型中處理此問(wèn)題的方式是,每次需要時(shí)對(duì)整個(gè)實(shí)體進(jìn)行操作。假設(shè)你有用戶,然后你首先拉一個(gè)用戶:

GET /user/100

然后,您在網(wǎng)頁(yè)中擁有用戶ID = 100的整個(gè)字段。然后你改變它的姓氏。使用 PUT 謂詞調(diào)用相同的資源 URL 來(lái)傳播更改:

PUT /user/100

然后你發(fā)送所有的字段,或者更確切地說(shuō),“同一實(shí)體”用一個(gè)新的姓氏回來(lái)。你忘記了驗(yàn)證,驗(yàn)證將只作為一個(gè)黑匣子工作。如果添加更多字段,則會(huì)添加更多@NotNull或所需的任何驗(yàn)證。當(dāng)然,在某些情況下,您可能需要實(shí)際編寫(xiě)代碼塊以進(jìn)行驗(yàn)證。即使在這種情況下,驗(yàn)證也不會(huì)受到影響,因?yàn)槟鷮⒂幸粋€(gè)用于驗(yàn)證的主for循環(huán),并且每個(gè)字段都有自己的驗(yàn)證器。如果添加字段,則會(huì)添加驗(yàn)證程序,但主驗(yàn)證塊仍然不可觸及。


查看完整回答
反對(duì) 回復(fù) 2022-09-14
  • 1 回答
  • 0 關(guān)注
  • 130 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)