精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

REST API中的Patch請求大家都用錯了,這才是正確姿勢

開發 前端
HTTP PATCH 請求正文(Request Body)描述了如何修改目標資源以生成新版本。簡而言之,JSON Patch 格式使用 "一系列操作 "來描述應如何修改目標資源。JSON Patch文檔是一個 JSON 對象數組。數組中的每個對象正好代表一個 JSON Patch操作。

環境:SpringBoot3.2.5

1. 簡介

HTTP PATCH 方法它允許我們對 HTTP 資源進行部分更新。

在篇文章,將帶你如何使用 HTTP PATCH 方法和 JSON Patch文檔格式對 RESTful 資源進行部分更新。

HTTP PATCH 請求正文(Request Body)描述了如何修改目標資源以生成新版本。簡而言之,JSON Patch 格式使用 "一系列操作 "來描述應如何修改目標資源。JSON Patch文檔是一個 JSON 對象數組。數組中的每個對象正好代表一個 JSON Patch操作。Request Body請求格式如下:

[
  {
    "op": "replace|add|remove|move|copy|test",
    "path": "/xxx",
    ["value": "value"],
    ["from": "/yyy"]
  },
    ...
]

op:具體的操作
path:資源路徑
value:變更值;根據操作op不同,決定是否有該屬性
from:資源路徑;根據操作op不同,決定是否有該屬性

接下來,通過具體的示例來了解 JSON Patch操作。

2. JSON Patch操作

接下來的所有操作都基于下面的資源進行:

{ 
    "id": 1,
    "telephone": "001-555-1234",
    "favorites": ["Milk","Eggs"],
    "communicationPreferences": {"post":true, "email":true}
}

假設有上面的資源數據,下面將分別介紹基于該資源如何進行不同的操作。

2.1 add添加操作

添加操作為對象添加新值。此外,我們還可以用它來更新現有成員,并在指定索引處向數組中插入一個新值。

給favorities數據添加新值,并且插入到第一個位置。

請求Body

{
  "op": "add",
  "path": "/favorites/0",
  "value": "Bread"
}

結果

{
  "id": "1",
  "telephone": "001-555-1234",
  "favorites": ["Bread","Milk","Eggs"],
  "communicationPreferences": {"post":true, "email":true}
}

2.2 remove刪除操作

不僅可以刪除指定屬性的值,如果是數組還可以刪除指定索引位置的元素。

刪除communicationPreferences屬性值

請求Body

{
  "op": "remove",
  "path": "/communicationPreferences"
}

結果

{
  "id": "1",
  "telephone": "001-555-1234",
  "favorites": ["Bread","Milk","Eggs"],
  "communicationPreferences": null
}

 2.3 replace替換操作

將目標屬性值更新為一個新的值;

更新電話號碼;

請求Body

{
  "op": "replace",
  "path": "/telephone",
  "value": "001-555-5678"
}

結果

{ 
  "id": "1", 
  "telephone": "001-555-5678", 
  "favorites": ["Bread","Milk","Eggs"], 
  "communicationPreferences": null
}

2.4 move移動操作

移動操作會移除指定位置的值,并將其添加到目標位置。

移動favorities屬性第0號位置元素到最后一個位置。

請求Body

{
  "op": "move",
  "from": "/favorites/0",
  "path": "/favorites/-"
}

結果

{ 
  "id": "1", 
  "telephone": "001-555-5678", 
  "favorites": ["Milk","Eggs","Bread"], 
  "communicationPreferences": null
}

2.5 copy復制操作

復制操作將指定位置的值復制到目標位置。

將favorites屬性中的Milk復制一份到該屬性的最后位置。

請求Body

{
  "op": "copy",
  "from": "/favorites/0",
  "path": "/favorites/-"
}

結果

{ 
  "id": "1", 
  "telephone": "001-555-5678", 
  "favorites": ["Milk","Eggs","Bread","Milk"], 
  "communicationPreferences": null
}

2.6 test測試操作

測試操作測試 "路徑 "上的值是否等于 "值"。 

請求Body

{
  "op": "test", 
  "path": "/telephone",
  "value": "001-555-5678"
}

注意:JSON Patch請求的Content-Type類型為:application/json-patch+json

接下來將實戰演示在Spring Boot中如何使用JSON Patch。

3. 實戰案例

3.1 引入依賴

<dependency>
  <groupId>com.github.java-json-tools</groupId>
  <artifactId>json-patch</artifactId>
  <version>1.13</version>
</dependency>

該組件是RFC 6902(JSON Patch)和RFC 7386(JSON Merge Patch)的實現,其核心使用Jackson(2.2.x)。該組件的特性:

  • JSON Patch的序列化和JSON與Jackson Merge Patch實例
  • 全面支持RFC 6902操作,包括測試
  • JSON“差異”(僅RFC 6902)與運算因子分解

接下來進入實踐代碼的編寫

3.2 定義實體類

public class Customer {
  /**編號*/
  private Long id ;
  /**電話*/
  private String telephone ;
  /**收藏集*/
  private List<String> favorites ;
  /**通信首選項*/
  private Map<String, Boolean> communicationPreferences ;
  public Customer(Long id, String telephone, List<String> favorites,
      Map<String, Boolean> communicationPreferences) {
    this.id = id ;
    this.telephone = telephone ;
    this.favorites = favorites ;
    this.communicationPreferences = communicationPreferences ;
  }
  // getters, setters
}

定義異常類

public static class CustomerNotFoundException extends RuntimeException {
}

當沒有資源時拋出該異常類

3.3 Service類

@Service
public static class CustomerService {
  // 模擬靜態數據
  private static List<Customer> DATAS = List
    .of(new Customer(
          1L, "188", 
          List.of("Milk", "Eggs"), 
          Map.of("phone", true, "email", true)));
  // 根據ID查詢操作
  public Optional<Customer> findCustomer(Long id) {
    return DATAS.stream().filter(customer -> customer.getId() == id).findFirst();
  }
}

接下來就是關鍵的Controller接口的編寫了

3.4 Controller接口

@PatchMapping(path = "/{id}", consumes = "application/json-patch+json")
public ResponseEntity<Customer> updateCustomer(@PathVariable Long id, @RequestBody JsonPatch patch) {
  try {
    // 查詢資源
    Customer customer = customerService.findCustomer(id).orElseThrow(CustomerNotFoundException::new);
    Customer customerPatched = applyPatchToCustomer(patch, customer);
    return ResponseEntity.ok(customerPatched);
  } catch (JsonPatchException | JsonProcessingException e) {
    return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
  } catch (CustomerNotFoundException e) {
    return ResponseEntity.status(HttpStatus.NOT_FOUND).build();
  }
}
// 將請求的操作轉換成真實的資源變更
private Customer applyPatchToCustomer(JsonPatch patch, Customer targetCustomer)
    throws JsonPatchException, JsonProcessingException {
  ObjectMapper objectMapper = new ObjectMapper() ;
  JsonNode patched = patch.apply(objectMapper.convertValue(targetCustomer, JsonNode.class));
  return objectMapper.treeToValue(patched, Customer.class);
}

在該接口中注意以下兩點:

  • consumes屬性設置為application/json-patch+json,也就是請求的Content-Type必須是該值。
  • 請求body通過JsonPatch對象接收。

接下來進行測試:

圖片圖片

請求Body中定義了2個操作,replace與add。最后返回的結果表明操作成功,數據得到了變更。

責任編輯:武曉燕 來源: Spring全家桶實戰案例源碼
相關推薦

2024-09-25 08:22:06

2019-01-02 10:49:54

Tomcat內存HotSpot VM

2021-11-05 10:36:19

性能優化實踐

2017-06-12 16:17:07

2020-06-28 16:28:24

Windows 10WindowsU盤

2020-08-05 07:27:54

SQL優化分類

2018-07-30 11:21:30

華為云

2019-06-27 17:18:02

Java日志編程語言

2025-01-10 06:30:00

2021-05-26 05:33:30

5G網絡運營商

2021-05-21 13:10:17

kill -9微服務Java

2025-04-25 10:28:40

2021-12-15 10:20:08

緩存架構開發

2019-12-04 18:45:00

華為Mate X

2024-12-27 09:29:09

2021-11-25 07:43:56

CIOIT董事會

2024-12-06 12:17:31

2025-06-18 03:30:00

AI人工智能智能體

2021-11-10 16:03:42

Pyecharts Python可視化

2024-09-12 11:51:44

點贊
收藏

51CTO技術棧公眾號

97超碰人人澡| 国内精品久久久久久久97牛牛 | 欧洲成人午夜精品无码区久久| 日韩av官网| 国产精品888| 日韩av电影在线播放| 岛国大片在线免费观看| 欧美24videosex性欧美| 久久精品视频在线看| 狠狠久久婷婷| 欧美日韩一区二区三区免费看| 免费观看成人高| 免费观看一区二区三区毛片| 日韩一区二区在线| 亚洲第一精品电影| av在线无限看| 大桥未久在线视频| 亚洲你懂的在线视频| 91视频免费在线观看| 99精品人妻国产毛片| 亚洲欧美亚洲| 色久欧美在线视频观看| 中国极品少妇xxxx| 日韩免费在线电影| 亚洲aⅴ怡春院| 午夜欧美性电影| 日本高清视频在线| 久久成人免费电影| 97婷婷大伊香蕉精品视频| 久草视频手机在线| 国内黄色精品| 日韩av综合中文字幕| 久久久久久久久久毛片| 欧美成人app| 成人51免费| 久久综合精品国产一区二区三区 | 91福利精品在线观看| 亚洲国产视频直播| 在线观看欧美亚洲| 国产精品国产三级国产aⅴ| 久久久久99| 欧美尺度大的性做爰视频| 肉色超薄丝袜脚交69xx图片 | 亚洲视频国产视频| 在线观看国产免费视频| eeuss鲁片一区二区三区 | 欧美性猛交 xxxx| 国产乱码字幕精品高清av | 男人天堂av片| 国产网红女主播精品视频| 亚洲激情欧美激情| av磁力番号网| 99视频免费在线观看| 中文字幕中文字幕在线一区 | 亚洲午夜黄色| 色偷偷91综合久久噜噜| 黄色免费一级视频| gogogo高清在线观看一区二区| 亚洲欧洲自拍偷拍| 韩国三级hd中文字幕| 欧美精品一区二区三区中文字幕| 亚洲免费人成在线视频观看| 精品欧美一区二区久久久| 最新亚洲精品| 伊人av综合网| 中文字幕 自拍| 久久在线视频免费观看| 久久夜色精品国产欧美乱| 黄色片子在线观看| 2021中文字幕在线| 一区二区美女| 日韩一级欧美一级| 超碰在线播放91| 先锋影音一区二区| 欧美一区二区精品久久911| 久久发布国产伦子伦精品| 日韩精品成人在线观看| 亚洲第一精品夜夜躁人人爽| 免费在线观看成年人视频| 米奇777超碰欧美日韩亚洲| 一本色道久久综合亚洲精品小说 | www.555国产精品免费| 一本一道久久a久久| 亚洲精品乱码久久久久久金桔影视 | 在线电影院国产精品| 中文字幕第17页| 伊人精品综合| 国产午夜精品视频| 成人涩涩小片视频日本| 激情综合在线| 国产精品久久久久久亚洲调教 | 日韩精品亚洲精品| 变态另类ts人妖一区二区| 欧美freesextv| 欧美激情视频网| 日韩一级片中文字幕| 国产原创一区二区三区| 精品久久久久久一区二区里番| 污视频在线免费观看| 国产精品久久久久桃色tv| 免费人成自慰网站| 中文字幕在线看片| 6080日韩午夜伦伦午夜伦| 星空大象在线观看免费播放| 国内精品伊人久久久| 久久99蜜桃| 亚洲欧美国内爽妇网| 免费成年人视频在线观看| 亚洲精品系列| 91免费综合在线| 蜜桃视频在线入口www| 一区二区三区资源| 国内自拍视频网| 国产在线播放精品| 在线视频欧美性高潮| 天天操天天爽天天干| 国产福利精品一区二区| 欧美日本韩国国产| 黑人极品ⅴideos精品欧美棵| 在线视频一区二区三| www国产视频| 欧美黄色精品| 国产中文字幕亚洲| 久久精品蜜桃| 一区二区在线观看免费视频播放| 国产精品人人爽人人爽| 先锋影音国产精品| 久久久久国产一区二区三区| 国产美女裸体无遮挡免费视频| 国产亚洲欧美日韩日本| 内射国产内射夫妻免费频道| 天堂va在线高清一区| 日韩在线观看免费全集电视剧网站| 国产91精品一区| 国产成人av网站| 欧美日韩亚洲国产成人| 成人性生活视频| 亚洲精品国产福利| 男人天堂中文字幕| 粉嫩嫩av羞羞动漫久久久| 中文字幕一区二区三区四区五区| 色豆豆成人网| 日韩精品在线免费观看| 精品美女久久久久| av高清不卡在线| 成人黄色大片网站| 亚洲国产中文在线| 色综合久综合久久综合久鬼88| 国产精品一区二区三区在线免费观看| 欧美激情资源网| 亚洲欧美自拍另类日韩| 大尺度做爰床戏呻吟舒畅| a∨色狠狠一区二区三区| 亚洲摸下面视频| 日韩激情在线播放| av动漫一区二区| av动漫在线观看| 亚洲国产精品嫩草影院久久av| 97高清免费视频| 亚洲精品视频网| 亚洲一区视频在线观看视频| 日本少妇xxxx| 先锋亚洲精品| 婷婷久久伊人| 精品一区二区三区中文字幕在线 | a级毛片免费观看在线| 欧美日韩免费观看一区二区三区 | 欧美日韩 国产精品| 成人自拍爱视频| а√中文在线8| 亚洲第一网站男人都懂| 欧美另类视频在线观看| 国产麻豆成人传媒免费观看| 成人午夜免费在线| 黑人操亚洲人| 91成人在线看| 性xxxxfreexxxxx欧美丶| 亚洲欧洲在线免费| 国产精品爽爽久久久久久| 中文字幕在线不卡一区| 手机在线观看日韩av| 日韩图片一区| 新呦u视频一区二区| 国产精品成人3p一区二区三区| 色噜噜狠狠狠综合曰曰曰88av| www.亚洲欧美| 在线观看一区不卡| wwwav国产| 久久久久久久电影| 手机看片福利日韩| 欧美视频在线观看| 激情欧美一区二区三区中文字幕 | 成人欧美一区二区三区黑人孕妇| 色屁屁www国产馆在线观看| 亚洲精品视频中文字幕| 91成品人影院| 欧美国产精品一区| 又色又爽又黄视频| 日韩视频中文| 无遮挡亚洲一区| 黄色网一区二区| 国产日韩在线看| 超碰在线97国产| zzijzzij亚洲日本成熟少妇| 日本毛片在线观看| 欧美精品自拍偷拍| 日韩黄色在线播放| 一区二区三区视频在线看| 91在线无精精品白丝| 成人精品gif动图一区| 日韩精品一区在线视频| 91九色精品| 欧美在线播放一区| 欧州一区二区三区| 国产精品美女免费看| 日韩影院在线| 久热99视频在线观看| 日韩有码电影| 欧美一级生活片| 五月天激情四射| 精品国产成人在线| 欧美三级免费看| 中文字幕在线免费不卡| wwwwxxxx国产| 国产精品亚洲成人| 日本黄色福利视频| 翔田千里一区二区| 国产婷婷一区二区三区| 中文字幕一区二区av| 亚洲精蜜桃久在线| 伊人精品一区| 精品国产乱码久久久久| 国产 日韩 欧美 综合 一区| 51国偷自产一区二区三区| 成人日韩在线观看| 色综合久久88| 在线观看电影av| 久久婷婷国产麻豆91天堂| 国产三区四区在线观看| 亚洲欧美国产精品va在线观看| 四虎影院在线播放| 亚洲成人在线网| 日韩一级片免费在线观看| 日韩欧美国产麻豆| 国产偷拍一区二区| 欧美一级在线免费| 国产富婆一级全黄大片| 制服丝袜在线91| 无码人妻丰满熟妇奶水区码| 色综合久久久网| 久久亚洲精品石原莉奈| 欧美丝袜一区二区三区| 在线视频一区二区三区四区| 色中色一区二区| 亚洲精品一区二三区| 欧美日韩中文一区| 一级片一区二区三区| 在线看国产日韩| 亚洲天堂中文网| 欧美精品在线视频| 国产一区二区三区黄片| 日韩欧美资源站| 国产精品久久久久毛片| 91精品国产91久久久久久一区二区| 国产aⅴ爽av久久久久成人| 日韩欧美成人一区二区| 99热这里只有精品9| 亚洲精品在线观| www.五月婷婷| 亚洲欧美三级在线| 深夜福利免费在线观看| 伊人一区二区三区久久精品| 久久久pmvav| 久久精品99无色码中文字幕| 大香伊人中文字幕精品| 国产激情久久久| 91精品亚洲一区在线观看| www.成人三级视频| 亚洲欧美tv| 人人妻人人澡人人爽精品欧美一区| 中文字幕av亚洲精品一部二部| 国产www免费| 日韩精品1区2区3区| 国产视频1区2区3区| 国产呦萝稀缺另类资源| 国产精品无码专区| 久久综合丝袜日本网| 少妇视频在线播放| 一区二区三区不卡视频| 日本熟妇一区二区三区| 这里只有精品99re| 日本一区高清| 日韩三级成人av网| 中文在线а√天堂| 91日本在线观看| 国产真实有声精品录音| 黄色三级中文字幕| 亚洲视频1区| 在线视频一二区| 久久综合丝袜日本网| 久久网免费视频| 欧洲一区二区av| 日本美女一级片| 美日韩在线视频| 成人一区视频| 精品欧美一区二区久久久伦| 一区二区三区午夜视频| 岳毛多又紧做起爽| 国产高清视频一区| 美国美女黄色片| 欧美日韩一二三四五区| 精品国自产在线观看| 中文字幕在线观看亚洲| 最新欧美色图| av成人在线电影| 我不卡影院28| 中文字幕 91| 久久久久久久综合色一本| 久草视频精品在线| 欧美一区二区三区色| 九色在线免费| 97视频在线看| 538任你躁精品视频网免费| 在线看无码的免费网站| 肉色丝袜一区二区| 日本一区二区三区网站| 午夜久久电影网| 六月丁香色婷婷| 九九久久综合网站| 国产日韩欧美中文在线| 一区二区三区不卡在线| 久久久久久网| 中文字幕日韩三级片| 亚洲成av人影院| 草逼视频免费看| 久久91精品国产| 秋霞一区二区| 亚洲国产一二三精品无码 | 日韩午夜免费| 国产吃瓜黑料一区二区| 亚洲欧美另类久久久精品| 91久久久久国产一区二区| 日韩最新免费不卡| 日本一区二区三区中文字幕| 一区二区不卡在线| 精品无人码麻豆乱码1区2区 | 国产精品一区二区久久久| 日韩三级视频| 国产精品入口芒果| 99久久精品免费看国产免费软件| 国产精品111| 亚洲激情电影中文字幕| 理论不卡电影大全神| 久久精品国产第一区二区三区最新章节 | 日韩 欧美 中文| 日韩av影视综合网| 在线能看的av网址| 日本一区二区精品| 日韩电影在线观看电影| 五月婷六月丁香| 色噜噜狠狠成人网p站| 9色在线视频| 91在线网站视频| 亚洲国产高清视频| 五月婷婷之婷婷| 一区二区成人在线观看| 特黄视频在线观看| 97在线观看视频| 国产成人精品999在线观看| www.国产视频.com| 亚洲综合激情小说| 三级理论午夜在线观看| 国产精品av在线| 中文字幕免费一区二区| 中文字幕乱码一区| 色av综合在线| 欧美激情办公室videoshd| 国产超碰91| 国产精品主播| 小早川怜子一区二区的演员表| 欧美人牲a欧美精品| 青青青青在线| 狠狠色噜噜狠狠狠狠色吗综合| 日本欧美大码aⅴ在线播放| 中文字幕在线有码| 亚洲免费影视第一页| 国产精品亚洲四区在线观看| 超薄肉色丝袜足j调教99| 成人18视频在线播放| 中文字幕黄色av| 欧美激情精品在线| 日本在线中文字幕一区| 黄色三级视频片| 亚洲图片自拍偷拍| 天堂av在线7| 91久色国产| 视频一区二区不卡| 国产第一页第二页| 一区二区福利视频| 国产精品国产|