Class MultipartEntityBuilder

java.lang.Object
org.apache.hc.client5.http.entity.mime.MultipartEntityBuilder

public class MultipartEntityBuilder extends Object
Builder for multipart HttpEntitys.

This class constructs multipart entities with a boundary determined by either a random UUID or an explicit boundary set via setBoundary(String).

IMPORTANT: it is responsibility of the caller to validate / sanitize content of body parts. For instance, when using an explicit boundary, it's the caller's responsibility to ensure the body parts do not contain the boundary value, which can prevent the consumer of the entity from correctly parsing / processing the body parts.

Since:
5.0
  • Field Details

    • contentType

      private org.apache.hc.core5.http.ContentType contentType
    • mode

      private HttpMultipartMode mode
    • boundary

      private String boundary
    • charset

      private Charset charset
    • multipartParts

      private List<MultipartPart> multipartParts
    • BOUNDARY_PREFIX

      private static final String BOUNDARY_PREFIX
      See Also:
    • LOG

      private static final org.slf4j.Logger LOG
      The logger for this class.
    • preamble

      private String preamble
      The preamble of the multipart message. This field stores the optional preamble that should be added at the beginning of the multipart message. It can be null if no preamble is needed.
    • epilogue

      private String epilogue
      The epilogue of the multipart message. This field stores the optional epilogue that should be added at the end of the multipart message. It can be null if no epilogue is needed.
    • EMPTY_NAME_VALUE_ARRAY

      private static final org.apache.hc.core5.http.NameValuePair[] EMPTY_NAME_VALUE_ARRAY
      An empty immutable NameValuePair array.
  • Constructor Details

    • MultipartEntityBuilder

      MultipartEntityBuilder()
  • Method Details

    • create

      public static MultipartEntityBuilder create()
    • setMode

    • setLaxMode

      public MultipartEntityBuilder setLaxMode()
    • setStrictMode

      public MultipartEntityBuilder setStrictMode()
    • setBoundary

      public MultipartEntityBuilder setBoundary(String boundary)
      Sets a custom boundary string for the multipart entity.

      If null is provided, the builder reverts to its default logic of using a random UUID.

      IMPORTANT: when setting an explicit boundary, it is responsibility of the caller to validate / sanitize content of body parts to ensure they do not contain the boundary value.

      Parameters:
      boundary - the boundary string, or null to use a random UUID.
      Returns:
      this builder instance
    • setMimeSubtype

      public MultipartEntityBuilder setMimeSubtype(String subType)
      Since:
      4.4
    • setContentType

      public MultipartEntityBuilder setContentType(org.apache.hc.core5.http.ContentType contentType)
      Returns:
      this instance.
      Since:
      4.5
    • addParameter

      public MultipartEntityBuilder addParameter(org.apache.hc.core5.http.message.BasicNameValuePair parameter)
      Add parameter to the current ContentType.
      Parameters:
      parameter - The name-value pair parameter to add to the ContentType.
      Returns:
      this instance.
      Since:
      5.2
    • setCharset

      public MultipartEntityBuilder setCharset(Charset charset)
    • addPart

      public MultipartEntityBuilder addPart(MultipartPart multipartPart)
      Since:
      4.4
    • addPart

      public MultipartEntityBuilder addPart(String name, ContentBody contentBody)
    • addTextBody

      public MultipartEntityBuilder addTextBody(String name, String text, org.apache.hc.core5.http.ContentType contentType)
    • addTextBody

      public MultipartEntityBuilder addTextBody(String name, String text)
    • addBinaryBody

      public MultipartEntityBuilder addBinaryBody(String name, byte[] b, org.apache.hc.core5.http.ContentType contentType, String filename)
    • addBinaryBody

      public MultipartEntityBuilder addBinaryBody(String name, byte[] b)
    • addBinaryBody

      public MultipartEntityBuilder addBinaryBody(String name, File file, org.apache.hc.core5.http.ContentType contentType, String filename)
    • addBinaryBody

      public MultipartEntityBuilder addBinaryBody(String name, Path path)
      Adds body with contents from the given source Path.
      Parameters:
      name - The part name.
      path - The source path.
      Returns:
      this instance.
      Since:
      5.6
    • addBinaryBody

      public MultipartEntityBuilder addBinaryBody(String name, Path path, org.apache.hc.core5.http.ContentType contentType, String fileName)
      Adds body with contents from the given source Path.
      Parameters:
      name - The part name.
      path - The source path.
      contentType - The content type.
      fileName - The file name to override the Path's file name.
      Returns:
      this instance.
      Since:
      5.6
    • addBinaryBody

      public MultipartEntityBuilder addBinaryBody(String name, File file)
    • addBinaryBody

      public MultipartEntityBuilder addBinaryBody(String name, InputStream stream, org.apache.hc.core5.http.ContentType contentType, String filename)
    • addBinaryBody

      public MultipartEntityBuilder addBinaryBody(String name, InputStream stream)
    • getRandomBoundary

      private String getRandomBoundary()
      Generates a random boundary using UUID. The UUID is a v4 random UUID generated from a cryptographically-secure random source.

      A cryptographically-secure random number source is used to generate the UUID, to avoid a malicious actor crafting a body part that contains the boundary value to tamper with the entity structure.

    • addPreamble

      public MultipartEntityBuilder addPreamble(String preamble)
      Adds a preamble to the multipart entity being constructed. The preamble is the text that appears before the first boundary delimiter. The preamble is optional and may be null.
      Parameters:
      preamble - The preamble text to add to the multipart entity
      Returns:
      this instance.
      Since:
      5.3
    • addEpilogue

      public MultipartEntityBuilder addEpilogue(String epilogue)
      Adds an epilogue to the multipart entity being constructed. The epilogue is the text that appears after the last boundary delimiter. The epilogue is optional and may be null.
      Parameters:
      epilogue - The epilogue text to add to the multipart entity
      Returns:
      this instance.
      Since:
      5.3
    • buildEntity

      MultipartFormEntity buildEntity()
    • build

      public org.apache.hc.core5.http.HttpEntity build()