com.google.common.net

## Class MediaType

- java.lang.Object
- - com.google.common.net.MediaType

-     @Beta
      @GwtCompatible
      @Immutable
      public final class MediaType
      extends java.lang.Object

  Represents an Internet Media Type (also known as a MIME Type or Content Type). This class also supports the concept of media ranges defined by HTTP/1.1. As such, the `*` character is treated as a wildcard and is used to represent any acceptable type or subtype value. A media type may not have wildcard type with a declared subtype. The `*` character has no special meaning as part of a parameter. All values for type, subtype, parameter attributes or parameter values must be valid according to RFCs 2045 and 2046.

  All portions of the media type that are case-insensitive (type, subtype, parameter attributes) are normalized to lowercase. The value of the `charset` parameter is normalized to lowercase, but all others are left as-is.

  Note that this specifically does not represent the value of the MIME `Content-Type` header and as such has no support for header-specific considerations such as line folding and comments.

  For media types that take a charset the predefined constants default to UTF-8 and have a "_UTF_8" suffix. To get a version without a character set, use `withoutParameters()`.

  Since:
    12.0

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `static MediaType` | `ANY_APPLICATION_TYPE`
    `static MediaType` | `ANY_AUDIO_TYPE`
    `static MediaType` | `ANY_IMAGE_TYPE`
    `static MediaType` | `ANY_TEXT_TYPE`
    `static MediaType` | `ANY_TYPE`
    `static MediaType` | `ANY_VIDEO_TYPE`
    `static MediaType` | `APPLE_MOBILE_CONFIG` Media type for Apple over-the-air mobile configuration profiles.
    `static MediaType` | `APPLE_PASSBOOK` Media type for Apple Passbook.
    `static MediaType` | `APPLICATION_BINARY` This is a non-standard media type, but is commonly used in serving hosted binary files as it is known not to trigger content sniffing in current browsers.
    `static MediaType` | `APPLICATION_XML_UTF_8` As described in RFC 3023, this constant (`application/xml`) is used for XML documents that are "unreadable by casual users." `XML_UTF_8` is provided for documents that may be read by users.
    `static MediaType` | `ATOM_UTF_8`
    `static MediaType` | `BMP`
    `static MediaType` | `BZIP2`
    `static MediaType` | `CACHE_MANIFEST_UTF_8`
    `static MediaType` | `CRW` The media type for the Canon Image File Format (`crw` files), a widely-used "raw image" format for cameras.
    `static MediaType` | `CSS_UTF_8`
    `static MediaType` | `CSV_UTF_8`
    `static MediaType` | `DART_UTF_8` Media type for dart files.
    `static MediaType` | `EOT` Media type for Embedded OpenType fonts.
    `static MediaType` | `EPUB` As described in the International Digital Publishing Forum EPUB is the distribution and interchange format standard for digital publications and documents.
    `static MediaType` | `FORM_DATA`
    `static MediaType` | `GIF`
    `static MediaType` | `GZIP`
    `static MediaType` | `HTML_UTF_8`
    `static MediaType` | `I_CALENDAR_UTF_8`
    `static MediaType` | `ICO`
    `static MediaType` | `JAVASCRIPT_UTF_8` RFC 4329 declares this to be the correct media type for JavaScript, but `text/javascript` may be necessary in certain situations for compatibility.
    `static MediaType` | `JPEG`
    `static MediaType` | `JSON_UTF_8`
    `static MediaType` | `KEY_ARCHIVE` As described in PKCS #12: Personal Information Exchange Syntax Standard, PKCS #12 defines an archive file format for storing many cryptography objects as a single file.
    `static MediaType` | `KML`
    `static MediaType` | `KMZ`
    `static MediaType` | `MANIFEST_JSON_UTF_8` Media type for the Manifest for a web application.
    `static MediaType` | `MBOX`
    `static MediaType` | `MICROSOFT_EXCEL`
    `static MediaType` | `MICROSOFT_POWERPOINT`
    `static MediaType` | `MICROSOFT_WORD`
    `static MediaType` | `MP4_AUDIO`
    `static MediaType` | `MP4_VIDEO`
    `static MediaType` | `MPEG_AUDIO`
    `static MediaType` | `MPEG_VIDEO`
    `static MediaType` | `OCTET_STREAM`
    `static MediaType` | `OGG_AUDIO`
    `static MediaType` | `OGG_CONTAINER`
    `static MediaType` | `OGG_VIDEO`
    `static MediaType` | `OOXML_DOCUMENT`
    `static MediaType` | `OOXML_PRESENTATION`
    `static MediaType` | `OOXML_SHEET`
    `static MediaType` | `OPENDOCUMENT_GRAPHICS`
    `static MediaType` | `OPENDOCUMENT_PRESENTATION`
    `static MediaType` | `OPENDOCUMENT_SPREADSHEET`
    `static MediaType` | `OPENDOCUMENT_TEXT`
    `static MediaType` | `PDF`
    `static MediaType` | `PLAIN_TEXT_UTF_8`
    `static MediaType` | `PNG`
    `static MediaType` | `POSTSCRIPT`
    `static MediaType` | `PROTOBUF` Protocol buffers
    `static MediaType` | `PSD` The media type for the Photoshop File Format (`psd` files) as defined by IANA, and found in `/etc/mime.types`, e.g.
    `static MediaType` | `QUICKTIME`
    `static MediaType` | `RDF_XML_UTF_8`
    `static MediaType` | `RTF_UTF_8`
    `static MediaType` | `SFNT` Media type for SFNT fonts (which includes TrueType and OpenType fonts).
    `static MediaType` | `SHOCKWAVE_FLASH`
    `static MediaType` | `SKETCHUP`
    `static MediaType` | `SVG_UTF_8`
    `static MediaType` | `TAR`
    `static MediaType` | `TEXT_JAVASCRIPT_UTF_8` RFC 4329 declares `application/javascript` to be the correct media type for JavaScript, but this may be necessary in certain situations for compatibility.
    `static MediaType` | `TIFF`
    `static MediaType` | `TSV_UTF_8` Tab separated values.
    `static MediaType` | `VCARD_UTF_8`
    `static MediaType` | `WEBM_AUDIO`
    `static MediaType` | `WEBM_VIDEO`
    `static MediaType` | `WEBP`
    `static MediaType` | `WML_UTF_8`
    `static MediaType` | `WMV`
    `static MediaType` | `WOFF` Media type for the Web Open Font Format (WOFF) defined by the W3C.
    `static MediaType` | `XHTML_UTF_8`
    `static MediaType` | `XML_UTF_8` As described in RFC 3023, this constant (`text/xml`) is used for XML documents that are "readable by casual users." `APPLICATION_XML_UTF_8` is provided for documents that are intended for applications.
    `static MediaType` | `XRD_UTF_8` Media type for Extensible Resource Descriptors.
    `static MediaType` | `ZIP`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `Optional<java.nio.charset.Charset>` | `charset()` Returns an optional charset for the value of the charset parameter if it is specified.
    `static MediaType` | `create(java.lang.String type, java.lang.String subtype)` Creates a new media type with the given type and subtype.
    `boolean` | `equals(java.lang.Object obj)`
    `int` | `hashCode()`
    `boolean` | `hasWildcard()` Returns true if either the type or subtype is the wildcard.
    `boolean` | `is(MediaType mediaTypeRange)` Returns `true` if this instance falls within the range (as defined by the HTTP Accept header) given by the argument according to three criteria: The type of the argument is the wildcard or equal to the type of this instance.
    `ImmutableListMultimap<java.lang.String,java.lang.String>` | `parameters()` Returns a multimap containing the parameters of this media type.
    `static MediaType` | `parse(java.lang.String input)` Parses a media type from its string representation.
    `java.lang.String` | `subtype()` Returns the media subtype.
    `java.lang.String` | `toString()` Returns the string representation of this media type in the format described in RFC 2045.
    `java.lang.String` | `type()` Returns the top-level media type.
    `MediaType` | `withCharset(java.nio.charset.Charset charset)` Returns a new instance with the same type and subtype as this instance, with the `charset` parameter set to the `name` of the given charset.
    `MediaType` | `withoutParameters()` Returns a new instance with the same type and subtype as this instance, but without any parameters.
    `MediaType` | `withParameter(java.lang.String attribute, java.lang.String value)` Replaces all parameters with the given attribute with a single parameter with the given value.
    `MediaType` | `withParameters(Multimap<java.lang.String,java.lang.String> parameters)` Replaces all parameters with the given parameters.

    - ### Methods inherited from class java.lang.Object

      `clone, finalize, getClass, notify, notifyAll, wait, wait, wait`

- - ### Field Detail

    - #### ANY_TYPE

          public static final MediaType ANY_TYPE

    - #### ANY_TEXT_TYPE

          public static final MediaType ANY_TEXT_TYPE

    - #### ANY_IMAGE_TYPE

          public static final MediaType ANY_IMAGE_TYPE

    - #### ANY_AUDIO_TYPE

          public static final MediaType ANY_AUDIO_TYPE

    - #### ANY_VIDEO_TYPE

          public static final MediaType ANY_VIDEO_TYPE

    - #### ANY_APPLICATION_TYPE

          public static final MediaType ANY_APPLICATION_TYPE

    - #### CACHE_MANIFEST_UTF_8

          public static final MediaType CACHE_MANIFEST_UTF_8

    - #### CSS_UTF_8

          public static final MediaType CSS_UTF_8

    - #### CSV_UTF_8

          public static final MediaType CSV_UTF_8

    - #### HTML_UTF_8

          public static final MediaType HTML_UTF_8

    - #### I_CALENDAR_UTF_8

          public static final MediaType I_CALENDAR_UTF_8

    - #### PLAIN_TEXT_UTF_8

          public static final MediaType PLAIN_TEXT_UTF_8

    - #### TEXT_JAVASCRIPT_UTF_8

          public static final MediaType TEXT_JAVASCRIPT_UTF_8

      RFC 4329 declares `application/javascript` to be the correct media type for JavaScript, but this may be necessary in certain situations for compatibility.

    - #### TSV_UTF_8

          public static final MediaType TSV_UTF_8

      Tab separated values.
      Since:
        15.0

    - #### VCARD_UTF_8

          public static final MediaType VCARD_UTF_8

    - #### WML_UTF_8

          public static final MediaType WML_UTF_8

    - #### XML_UTF_8

          public static final MediaType XML_UTF_8

      As described in RFC 3023, this constant (`text/xml`) is used for XML documents that are "readable by casual users." `APPLICATION_XML_UTF_8` is provided for documents that are intended for applications.

    - #### BMP

          public static final MediaType BMP

    - #### CRW

          public static final MediaType CRW

      The media type for the Canon Image File Format (`crw` files), a widely-used "raw image" format for cameras. It is found in `/etc/mime.types`, e.g. in Debian 3.48-1.
      Since:
        15.0

    - #### GIF

          public static final MediaType GIF

    - #### ICO

          public static final MediaType ICO

    - #### JPEG

          public static final MediaType JPEG

    - #### PNG

          public static final MediaType PNG

    - #### PSD

          public static final MediaType PSD

      The media type for the Photoshop File Format (`psd` files) as defined by IANA, and found in `/etc/mime.types`, e.g. of the Apache HTTPD project; for the specification, see Adobe Photoshop Document Format and Wikipedia; this is the regular output/input of Photoshop (which can also export to various image formats; note that files with extension "PSB" are in a distinct but related format).

      This is a more recent replacement for the older, experimental type `x-photoshop`: RFC-2046.6.

      Since:
        15.0

    - #### SVG_UTF_8

          public static final MediaType SVG_UTF_8

    - #### TIFF

          public static final MediaType TIFF

    - #### WEBP

          public static final MediaType WEBP

    - #### MP4_AUDIO

          public static final MediaType MP4_AUDIO

    - #### MPEG_AUDIO

          public static final MediaType MPEG_AUDIO

    - #### OGG_AUDIO

          public static final MediaType OGG_AUDIO

    - #### WEBM_AUDIO

          public static final MediaType WEBM_AUDIO

    - #### MP4_VIDEO

          public static final MediaType MP4_VIDEO

    - #### MPEG_VIDEO

          public static final MediaType MPEG_VIDEO

    - #### OGG_VIDEO

          public static final MediaType OGG_VIDEO

    - #### QUICKTIME

          public static final MediaType QUICKTIME

    - #### WEBM_VIDEO

          public static final MediaType WEBM_VIDEO

    - #### WMV

          public static final MediaType WMV

    - #### APPLICATION_XML_UTF_8

          public static final MediaType APPLICATION_XML_UTF_8

      As described in RFC 3023, this constant (`application/xml`) is used for XML documents that are "unreadable by casual users." `XML_UTF_8` is provided for documents that may be read by users.

    - #### ATOM_UTF_8

          public static final MediaType ATOM_UTF_8

    - #### BZIP2

          public static final MediaType BZIP2

    - #### DART_UTF_8

          public static final MediaType DART_UTF_8

      Media type for dart files.
      Since:
        19.0

    - #### APPLE_PASSBOOK

          public static final MediaType APPLE_PASSBOOK

      Media type for Apple Passbook.
      Since:
        19.0

    - #### EOT

          public static final MediaType EOT

      Media type for Embedded OpenType fonts. This is registered with the IANA.
      Since:
        17.0

    - #### EPUB

          public static final MediaType EPUB

      As described in the International Digital Publishing Forum EPUB is the distribution and interchange format standard for digital publications and documents. This media type is defined in the EPUB Open Container Format specification.
      Since:
        15.0

    - #### FORM_DATA

          public static final MediaType FORM_DATA

    - #### KEY_ARCHIVE

          public static final MediaType KEY_ARCHIVE

      As described in PKCS #12: Personal Information Exchange Syntax Standard, PKCS #12 defines an archive file format for storing many cryptography objects as a single file.
      Since:
        15.0

    - #### APPLICATION_BINARY

          public static final MediaType APPLICATION_BINARY

      This is a non-standard media type, but is commonly used in serving hosted binary files as it is known not to trigger content sniffing in current browsers. It should not be used in other situations as it is not specified by any RFC and does not appear in the /IANA MIME Media Types list. Consider `OCTET_STREAM` for binary data that is not being served to a browser.
      Since:
        14.0

    - #### GZIP

          public static final MediaType GZIP

    - #### JAVASCRIPT_UTF_8

          public static final MediaType JAVASCRIPT_UTF_8

      RFC 4329 declares this to be the correct media type for JavaScript, but `text/javascript` may be necessary in certain situations for compatibility.

    - #### JSON_UTF_8

          public static final MediaType JSON_UTF_8

    - #### MANIFEST_JSON_UTF_8

          public static final MediaType MANIFEST_JSON_UTF_8

      Media type for the Manifest for a web application.
      Since:
        19.0

    - #### KML

          public static final MediaType KML

    - #### KMZ

          public static final MediaType KMZ

    - #### MBOX

          public static final MediaType MBOX

    - #### APPLE_MOBILE_CONFIG

          public static final MediaType APPLE_MOBILE_CONFIG

      Media type for Apple over-the-air mobile configuration profiles.
      Since:
        18.0

    - #### MICROSOFT_EXCEL

          public static final MediaType MICROSOFT_EXCEL

    - #### MICROSOFT_POWERPOINT

          public static final MediaType MICROSOFT_POWERPOINT

    - #### MICROSOFT_WORD

          public static final MediaType MICROSOFT_WORD

    - #### OCTET_STREAM

          public static final MediaType OCTET_STREAM

    - #### OGG_CONTAINER

          public static final MediaType OGG_CONTAINER

    - #### OOXML_DOCUMENT

          public static final MediaType OOXML_DOCUMENT

    - #### OOXML_PRESENTATION

          public static final MediaType OOXML_PRESENTATION

    - #### OOXML_SHEET

          public static final MediaType OOXML_SHEET

    - #### OPENDOCUMENT_GRAPHICS

          public static final MediaType OPENDOCUMENT_GRAPHICS

    - #### OPENDOCUMENT_PRESENTATION

          public static final MediaType OPENDOCUMENT_PRESENTATION

    - #### OPENDOCUMENT_SPREADSHEET

          public static final MediaType OPENDOCUMENT_SPREADSHEET

    - #### OPENDOCUMENT_TEXT

          public static final MediaType OPENDOCUMENT_TEXT

    - #### PDF

          public static final MediaType PDF

    - #### POSTSCRIPT

          public static final MediaType POSTSCRIPT

    - #### PROTOBUF

          public static final MediaType PROTOBUF

      Protocol buffers
      Since:
        15.0

    - #### RDF_XML_UTF_8

          public static final MediaType RDF_XML_UTF_8

    - #### RTF_UTF_8

          public static final MediaType RTF_UTF_8

    - #### SFNT

          public static final MediaType SFNT

      Media type for SFNT fonts (which includes TrueType and OpenType fonts). This is registered with the IANA.
      Since:
        17.0

    - #### SHOCKWAVE_FLASH

          public static final MediaType SHOCKWAVE_FLASH

    - #### SKETCHUP

          public static final MediaType SKETCHUP

    - #### TAR

          public static final MediaType TAR

    - #### WOFF

          public static final MediaType WOFF

      Media type for the Web Open Font Format (WOFF) defined by the W3C. This is registered with the IANA.
      Since:
        17.0

    - #### XHTML_UTF_8

          public static final MediaType XHTML_UTF_8

    - #### XRD_UTF_8

          public static final MediaType XRD_UTF_8

      Media type for Extensible Resource Descriptors. This is not yet registered with the IANA, but it is specified by OASIS in the XRD definition and implemented in projects such as WebFinger.

    - #### ZIP

          public static final MediaType ZIP

  - ### Method Detail

    - #### type

          public java.lang.String type()

      Returns the top-level media type. For example, `"text"` in `"text/plain"`.

    - #### subtype

          public java.lang.String subtype()

      Returns the media subtype. For example, `"plain"` in `"text/plain"`.

    - #### parameters

          public ImmutableListMultimap<java.lang.String,java.lang.String> parameters()

      Returns a multimap containing the parameters of this media type.

    - #### charset

          public Optional<java.nio.charset.Charset> charset()

      Returns an optional charset for the value of the charset parameter if it is specified.
      Throws:
        `java.lang.IllegalStateException` - if multiple charset values have been set for this media type
        `java.nio.charset.IllegalCharsetNameException` - if a charset value is present, but illegal
        `java.nio.charset.UnsupportedCharsetException` - if a charset value is present, but no support is available in this instance of the Java virtual machine

    - #### withoutParameters

          public MediaType withoutParameters()

      Returns a new instance with the same type and subtype as this instance, but without any parameters.

    - #### withParameters

          public MediaType withParameters(Multimap<java.lang.String,java.lang.String> parameters)

      Replaces all parameters with the given parameters.
      Throws:
        `java.lang.IllegalArgumentException` - if any parameter or value is invalid

    - #### withParameter

          public MediaType withParameter(java.lang.String attribute,
                                java.lang.String value)

      Replaces all parameters with the given attribute with a single parameter with the given value. If multiple parameters with the same attributes are necessary use `withParameters(com.google.common.collect.Multimap<java.lang.String, java.lang.String>)`. Prefer `withCharset(java.nio.charset.Charset)` for setting the `charset` parameter when using a `Charset` object.
      Throws:
        `java.lang.IllegalArgumentException` - if either `attribute` or `value` is invalid

    - #### withCharset

          public MediaType withCharset(java.nio.charset.Charset charset)

      Returns a new instance with the same type and subtype as this instance, with the `charset` parameter set to the `name` of the given charset. Only one `charset` parameter will be present on the new instance regardless of the number set on this one.

      If a charset must be specified that is not supported on this JVM (and thus is not representable as a `Charset` instance, use `withParameter(java.lang.String, java.lang.String)`.

    - #### hasWildcard

          public boolean hasWildcard()

      Returns true if either the type or subtype is the wildcard.

    - #### is

          public boolean is(MediaType mediaTypeRange)

      Returns `true` if this instance falls within the range (as defined by the HTTP Accept header) given by the argument according to three criteria:
      1. The type of the argument is the wildcard or equal to the type of this instance.
      2. The subtype of the argument is the wildcard or equal to the subtype of this instance.
      3. All of the parameters present in the argument are present in this instance.

      For example:

             PLAIN_TEXT_UTF_8.is(PLAIN_TEXT_UTF_8) // true
             PLAIN_TEXT_UTF_8.is(HTML_UTF_8) // false
             PLAIN_TEXT_UTF_8.is(ANY_TYPE) // true
             PLAIN_TEXT_UTF_8.is(ANY_TEXT_TYPE) // true
             PLAIN_TEXT_UTF_8.is(ANY_IMAGE_TYPE) // false
             PLAIN_TEXT_UTF_8.is(ANY_TEXT_TYPE.withCharset(UTF_8)) // true
             PLAIN_TEXT_UTF_8.withoutParameters().is(ANY_TEXT_TYPE.withCharset(UTF_8)) // false
             PLAIN_TEXT_UTF_8.is(ANY_TEXT_TYPE.withCharset(UTF_16)) // false

      Note that while it is possible to have the same parameter declared multiple times within a media type this method does not consider the number of occurrences of a parameter. For example, `"text/plain; charset=UTF-8"` satisfies `"text/plain; charset=UTF-8; charset=UTF-8"`.

    - #### create

          public static MediaType create(java.lang.String type,
                         java.lang.String subtype)

      Creates a new media type with the given type and subtype.
      Throws:
        `java.lang.IllegalArgumentException` - if type or subtype is invalid or if a wildcard is used for the type, but not the subtype.

    - #### parse

          public static MediaType parse(java.lang.String input)

      Parses a media type from its string representation.
      Throws:
        `java.lang.IllegalArgumentException` - if the input is not parsable

    - #### equals

          public boolean equals(@Nullable
                       java.lang.Object obj)

      Overrides:
        `equals` in class `java.lang.Object`

    - #### hashCode

          public int hashCode()

      Overrides:
        `hashCode` in class `java.lang.Object`

    - #### toString

          public java.lang.String toString()

      Returns the string representation of this media type in the format described in RFC 2045.
      Overrides:
        `toString` in class `java.lang.Object`