diff --git a/src/java.net.http/share/classes/java/net/http/HttpRequest.java b/src/java.net.http/share/classes/java/net/http/HttpRequest.java
--- a/src/java.net.http/share/classes/java/net/http/HttpRequest.java
+++ b/src/java.net.http/share/classes/java/net/http/HttpRequest.java
@@ -58,8 +58,9 @@
  * methods. A request's {@link URI}, headers, and body can be set. Request
  * bodies are provided through a {@link BodyPublisher BodyPublisher} supplied
  * to one of the {@link Builder#DELETE(BodyPublisher) DELETE},
- * {@link Builder#POST(BodyPublisher) POST} or
- * {@link Builder#PUT(BodyPublisher) PUT} methods.
+ * {@link Builder#POST(BodyPublisher) POST},
+ * {@link Builder#PUT(BodyPublisher) PUT} or
+ * {@link Builder#PATCH(BodyPublisher) PATCH} methods.
  * Once all required parameters have been set in the builder, {@link
  * Builder#build() build} will return the {@code HttpRequest}. Builders can be
  * copied and modified many times in order to build multiple related requests
@@ -249,6 +250,16 @@
         public Builder PUT(BodyPublisher bodyPublisher);
 
         /**
+         * Sets the request method of this builder to PATCH and sets its
+         * request body publisher to the given value.
+         *
+         * @param bodyPublisher the body publisher
+         *
+         * @return this builder
+         */
+        public Builder PATCH(BodyPublisher bodyPublisher);
+
+        /**
          * Sets the request method of this builder to DELETE and sets its
          * request body publisher to the given value.
          *
diff --git a/src/java.net.http/share/classes/jdk/internal/net/http/HttpRequestBuilderImpl.java b/src/java.net.http/share/classes/jdk/internal/net/http/HttpRequestBuilderImpl.java
--- a/src/java.net.http/share/classes/jdk/internal/net/http/HttpRequestBuilderImpl.java
+++ b/src/java.net.http/share/classes/jdk/internal/net/http/HttpRequestBuilderImpl.java
@@ -189,6 +189,11 @@
     }
 
     @Override
+    public HttpRequest.Builder PATCH(BodyPublisher body) {
+        return method0("PATCH", requireNonNull(body));
+    }
+
+    @Override
     public HttpRequest.Builder method(String method, BodyPublisher body) {
         requireNonNull(method);
         if (method.equals(""))
diff --git a/test/jdk/java/net/httpclient/HttpRequestBuilderTest.java b/test/jdk/java/net/httpclient/HttpRequestBuilderTest.java
--- a/test/jdk/java/net/httpclient/HttpRequestBuilderTest.java
+++ b/test/jdk/java/net/httpclient/HttpRequestBuilderTest.java
@@ -164,6 +164,9 @@
         builder = test1("PUT", builder, builder::PUT,
                         noBody(), null);
 
+        builder = test1("PATCH", builder, builder::PATCH,
+                        noBody(), null);
+
         builder = test2("method", builder, builder::method, "GET",
                         noBody(), null);
 
@@ -179,6 +182,10 @@
                         (HttpRequest.BodyPublisher)null,
                         NullPointerException.class);
 
+        builder = test1("PATCH", builder, builder::PATCH,
+                        (HttpRequest.BodyPublisher)null,
+                        NullPointerException.class);
+
         builder = test2("method", builder, builder::method, "GET",
                         (HttpRequest.BodyPublisher) null,
                         NullPointerException.class);
@@ -231,6 +238,10 @@
                () -> HttpRequest.newBuilder(TEST_URI).PUT(ofString("")).GET(),
                "GET");
 
+        method("newBuilder(TEST_URI).PATCH(ofString(\"\")).GET().build().method() == GET",
+               () -> HttpRequest.newBuilder(TEST_URI).PATCH(ofString("")).GET(),
+               "GET");
+
         method("newBuilder(TEST_URI).DELETE(ofString(\"\")).GET().build().method() == GET",
                () -> HttpRequest.newBuilder(TEST_URI).DELETE(ofString("")).GET(),
                "GET");
@@ -243,6 +254,10 @@
                () -> HttpRequest.newBuilder(TEST_URI).PUT(ofString("")),
                "PUT");
 
+        method("newBuilder(TEST_URI).PATCH(ofString(\"\")).build().method() == PATCH",
+               () -> HttpRequest.newBuilder(TEST_URI).PATCH(ofString("")),
+               "PATCH");
+
         method("newBuilder(TEST_URI).DELETE(ofString(\"\")).build().method() == DELETE",
                () -> HttpRequest.newBuilder(TEST_URI).DELETE(ofString("")),
                "DELETE");
@@ -255,6 +270,10 @@
                () -> HttpRequest.newBuilder(TEST_URI).GET().PUT(ofString("")),
                "PUT");
 
+        method("newBuilder(TEST_URI).GET().PATCH(ofString(\"\")).build().method() == PATCH",
+               () -> HttpRequest.newBuilder(TEST_URI).GET().PATCH(ofString("")),
+               "PATCH");
+
         method("newBuilder(TEST_URI).GET().DELETE(ofString(\"\")).build().method() == DELETE",
                () -> HttpRequest.newBuilder(TEST_URI).GET().DELETE(ofString("")),
                "DELETE");
