| [//]: # " Copyright (c) 2015, 2020 Oracle and/or its affiliates. All rights reserved. " | 
 | [//]: # " " | 
 | [//]: # " This program and the accompanying materials are made available under the " | 
 | [//]: # " terms of the Eclipse Distribution License v. 1.0, which is available at " | 
 | [//]: # " http://www.eclipse.org/org/documents/edl-v10.php. " | 
 | [//]: # " " | 
 | [//]: # " SPDX-License-Identifier: BSD-3-Clause " | 
 |  | 
 | Jersey HTTP PATCH | 
 | ================= | 
 |  | 
 | ### *Jersey HTTP PATCH Support Example* | 
 |  | 
 | This example demonstrates how to implement generic support for | 
 | [HTTP PATCH Method (RFC-5789)](https://tools.ietf.org/html/rfc5789) | 
 | via JAX-RS reader interceptor. The example has been created based on | 
 | [this Gerard Davison's blogentry] (http://kingsfleet.blogspot.co.uk/2014/02/transparent-patch-support-in-jax-rs-20.html). | 
 | The patch format supported by this example is [JSON Patch (RFC-6902)](http://tools.ietf.org/html/rfc6902). | 
 |  | 
 | Contents | 
 | -------- | 
 |  | 
 | The mapping of the URI path space is presented in the following table: | 
 |  | 
 | URI path                 | Resource class      | HTTP methods | 
 | ------------------------ | ------------------- | -------------- | 
 | **_/patchable-state_**   | PatchableResource   | GET, PATCH | 
 |  | 
 | As you can see in the table, there is only a single resource deployed in | 
 | this application, that supports `GET` and `PATCH` methods. The resource | 
 | represents a *patchable* state, which consists of 3 properties: | 
 |  | 
 | -   a `title` text property, | 
 | -   a `message` text property, and | 
 | -   a `list` property that represents a list/array of text strings. | 
 |  | 
 | This state can be patch via HTTP GET method by sending the desired | 
 | patch/diff in the JSON Patch format as defined in RFC-6902, for example: | 
 |  | 
 | ```javascript | 
 | [ | 
 |   { | 
 |     "op" : "replace", | 
 |     "path" : "/message", | 
 |     "value" : "patchedMessage" | 
 |   }, { | 
 |     "op" : "add", | 
 |     "path" : "/list/-", | 
 |     "value" : "one" | 
 |   } | 
 | ] | 
 | ``` | 
 |  | 
 | This patch will instruct the resource to replace it's `message` property | 
 | content with a new `"patchedMessage"` text and also to append a new | 
 | `"one"` string value to the list of valued contained in the `list` | 
 | property. | 
 |  | 
 | (See `HttpPatchTest` for more details.) | 
 |  | 
 | Sample Response | 
 | --------------- | 
 |  | 
 | You can apply a patch using curl: | 
 |  | 
 | >     curl -v -X PATCH http://localhost:8080/http-patch/patchable-state -H "Content-Type:application/json-patch+json" -d '[{ | 
 | >        "op": "replace", | 
 | >        "path": "/message", | 
 | >        "value": "patchedMessage" | 
 | >     }, { | 
 | >        "op": "add", | 
 | >        "path": "/list/-", | 
 | >        "value": "one" | 
 | >     }]' | 
 |  | 
 | The application will answer with a patched object: | 
 |  | 
 | ```javascript | 
 | { | 
 |    "list" : [ "one" ], | 
 |    "message" : "patchedMessage", | 
 |    "title" : "" | 
 | } | 
 | ``` | 
 |  | 
 | Running the Example | 
 | ------------------- | 
 |  | 
 | Run the example as follows: | 
 |  | 
 | >     mvn clean compile exec:java | 
 |  | 
 | This deploys the example using [Grizzly](https://projects.eclipse.org/projects/ee4j.grizzly) container. | 
 |  | 
 | A [WADL description](http://wadl.java.net/#spec) may be accessed at the URL: | 
 |  | 
 | -   <http://localhost:8080/http-patch/application.wadl> | 
 |  | 
 | The resource is available at | 
 |  | 
 | -   <http://localhost:8080/http-patch/patchable-state> |