Class FormDataMultiPart

All Implemented Interfaces:
Closeable, AutoCloseable

public class FormDataMultiPart extends MultiPart
Subclass of MultiPart with specialized support for media type multipart/form-data. See RFC 2388 for the formal definition of this media type.

For a server side application wishing to process an incoming multipart/form-data message, the following features are provided:

  • Incoming entities will be of type FormDataMultiPart, enabling access to the specialized methods.
  • Incoming body parts will be of type FormDataBodyPart, enabling access to its specialized methods.
  • Convenience method to return the FormDataBodyPart for a specified control name.
  • Convenience method to return a Map of FormDataBodyParts for all fields, keyed by field name.

For a client side application wishing to construct an outgoing multipart/form-data message, the following features are provided:

  • Media type of the FormDataMultiPart instance will automatically set to multipart/form-data.
  • Builder pattern method to add simple field values as body parts of type text/plain.
  • Builder pattern method to add named "file" field values with arbitrary media types.

TODO Consider supporting the use case of a nested multipart/mixed body part to contain multiple uploaded files.

Author:
Craig McClanahan, Imran M Yousuf (imran at smartitengineering.com), Paul Sandoz, Michal Gajdos
  • Constructor Details

    • FormDataMultiPart

      public FormDataMultiPart()
      Instantiates a new FormDataMultiPart instance with default characteristics.
  • Method Details

    • field

      public FormDataMultiPart field(String name, String value)
      Builder pattern method to add a named field with a text value, and return this instance.
      Parameters:
      name - the control name.
      value - the text value.
      Returns:
      this instance.
    • field

      public FormDataMultiPart field(String name, Object entity, MediaType mediaType)
      Builder pattern method to add a named field with an arbitrary media type and entity, and return this instance.
      Parameters:
      name - the control name.
      entity - entity value for the new field.
      mediaType - media type for the new field.
      Returns:
      this instance.
    • getField

      public FormDataBodyPart getField(String name)
      Gets a form data body part given a control name.
      Parameters:
      name - the control name.
      Returns:
      the form data body part, otherwise null if no part is present with the given control name. If more that one part is present with the same control name, then the first part that occurs is returned.
    • getFields

      public List<FormDataBodyPart> getFields(String name)
      Gets a list of one or more form data body parts given a control name.
      Parameters:
      name - the control name.
      Returns:
      the list of form data body parts, otherwise null if no parts are present with the given control name.
    • getFields

      public Map<String,List<FormDataBodyPart>> getFields()
      Gets a map of form data body parts where the key is the control name and the value is a list of one or more form data body parts.
      Returns:
      return the map of form data body parts.
    • setMediaType

      public void setMediaType(MediaType mediaType)
      Disables changing the media type to anything other than multipart/form-data.
      Overrides:
      setMediaType in class MultiPart
      Parameters:
      mediaType - the proposed media type.
      Throws:
      IllegalArgumentException - if the proposed media type is not multipart/form-data.