diff --git a/jersey/pom.xml b/jersey/pom.xml
index 005fa85077..d019d31e1e 100644
--- a/jersey/pom.xml
+++ b/jersey/pom.xml
@@ -76,6 +76,11 @@
jersey-apache-connector
${jersey.version}
+
+ org.glassfish.jersey.media
+ jersey-media-multipart
+ ${jersey.version}
+
@@ -103,4 +108,4 @@
3.3.2
-
\ No newline at end of file
+
diff --git a/jersey/src/main/java/com/baeldung/jersey/server/form/FormExampleResource.java b/jersey/src/main/java/com/baeldung/jersey/server/form/FormExampleResource.java
new file mode 100644
index 0000000000..15e82679ef
--- /dev/null
+++ b/jersey/src/main/java/com/baeldung/jersey/server/form/FormExampleResource.java
@@ -0,0 +1,61 @@
+package com.baeldung.jersey.server.form;
+
+import jakarta.ws.rs.*;
+import jakarta.ws.rs.core.MediaType;
+import org.glassfish.jersey.media.multipart.FormDataParam;
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+
+@Path("form")
+public class FormExampleResource
+{
+ @GET
+ @Path("/example1")
+ @Produces({MediaType.TEXT_HTML})
+ public InputStream getExample1() throws Exception
+ {
+ File f = new File("src/main/resources/html/example1.html");
+ return new FileInputStream(f);
+ }
+
+ @GET
+ @Path("/example2")
+ @Produces({MediaType.TEXT_HTML})
+ public InputStream getExample2() throws Exception
+ {
+ File f = new File("src/main/resources/html/example2.html");
+ return new FileInputStream(f);
+ }
+
+ @POST
+ @Path("/example1")
+ public String example1(@FormParam("first_name") String firstName,
+ @FormParam("last_name") String lastName,
+ @FormParam("age") String age)
+ {
+ return "Got: First = " + firstName + ", Last = " + lastName + ", Age = " + age;
+ }
+
+ @POST
+ @Path("/example2")
+ @Consumes(MediaType.MULTIPART_FORM_DATA)
+ public String example2(@FormDataParam("first_name") String firstName,
+ @FormDataParam("last_name") String lastName,
+ @FormDataParam("age") String age,
+ @FormDataParam("photo") InputStream photo)
+ throws Exception
+ {
+ int len;
+ int size = 1024;
+ byte[] buf;
+ ByteArrayOutputStream bos = new ByteArrayOutputStream();
+ buf = new byte[size];
+ while ((len = photo.read(buf, 0, size)) != -1)
+ bos.write(buf, 0, len);
+ buf = bos.toByteArray();
+ return "Got: First = " + firstName + ", Last = " + lastName + ", Age = " + age + ", Photo (# of bytes) = " + buf.length;
+ }
+}
diff --git a/jersey/src/main/resources/formexamples/example1.html b/jersey/src/main/resources/formexamples/example1.html
new file mode 100644
index 0000000000..6335dcce08
--- /dev/null
+++ b/jersey/src/main/resources/formexamples/example1.html
@@ -0,0 +1,16 @@
+
+
+ Example 1 using @FormParam
+
+
+
+
+
diff --git a/jersey/src/main/resources/formexamples/example2.html b/jersey/src/main/resources/formexamples/example2.html
new file mode 100644
index 0000000000..4875c652a4
--- /dev/null
+++ b/jersey/src/main/resources/formexamples/example2.html
@@ -0,0 +1,18 @@
+
+
+ Example 2 using @FormDataParam
+
+
+
+
+