Class KiwiMediaTypes

java.lang.Object
org.kiwiproject.beta.net.KiwiMediaTypes

@Beta public final class KiwiMediaTypes extends Object
Some utilities for working with media types. Mozilla also has a good reference that describes MIME types (IANA media types).

Google Guava contains the MediaType class which represents an Internet Media Type. It contains some useful methods, but not some (what we think are) basic utilities such as the ability to check if a media type is XML. Both text/xml and application/xml represent XML documents, so checking whether a media type is XML should take this into account. But the Guava MediaType#is method doesn't permit comparing like this when the type is different but the subtype is the same.

The Jakarta Rest MediaType is also useful, but its equals method unfortunately compares type, subtype, and parameters so you cannot use it to check if a media type such as "text/xml; charset=utf-8" equals the "text/xml" media type, since it will include the charset parameter in the comparison and return false.

Implementation Note:
Internally this uses Guava's MediaType to parse String media types.
  • Method Summary

    Modifier and Type
    Method
    Description
    static boolean
    isJson(jakarta.ws.rs.core.MediaType mediaType)
    Checks if the Jakarta Rest media type is "application/json", ignoring parameters such that "application/json; charset=utf-8" is considered JSON.
    static boolean
    isJson(String mediaType)
    Checks if the media type is "application/json", ignoring parameters such that "application/json; charset=utf-8" is considered JSON.
    static boolean
    isPlainText(jakarta.ws.rs.core.MediaType mediaType)
    Checks if the Jakarta Rest media type is "text/plain", ignoring parameters such that "text/plain; version=0.0.4; charset=utf-8" is considered plain text.
    static boolean
    isPlainText(String mediaType)
    Checks if the media type is "text/plain", ignoring parameters such that "text/plain; version=0.0.4; charset=utf-8" is considered plain text.
    static boolean
    isXml(jakarta.ws.rs.core.MediaType mediaType)
    Checks if the Jakarta Rest media type is "application/xml" or "text/xml", ignoring parameters such that "text/xml; charset=utf-8" is considered XML.
    static boolean
    isXml(String mediaType)
    Checks if the media type is "application/xml" or "text/xml", ignoring parameters such that "text/xml; charset=utf-8" is considered XML.
    static boolean
    matchesMediaType(jakarta.ws.rs.core.MediaType mediaType, String mediaTypeToMatch)
    Checks if the given media type has a type and subtype that matches the given type/subtype media type.
    static boolean
    matchesMediaType(String mediaType, String mediaTypeToMatch)
    Checks if the given media type has a type and subtype that matches the given type/subtype media type.
    static boolean
    matchesSubtype(String mediaType, String subtypeToMatch)
    Checks if the given media type has a type that matches the given value.
    static boolean
    matchesType(String mediaType, String typeToMatch)
    Checks if the given media type has a type that matches the given value.
    static boolean
    matchesTypeAndSubtype(jakarta.ws.rs.core.MediaType mediaType, String typeToMatch, String subtypeToMatch)
    Checks if the given media type has type and subtype that matches the given values.
    static boolean
    matchesTypeAndSubtype(jakarta.ws.rs.core.MediaType mediaType, Set<String> typesToMatch, String subtypeToMatch)
    Checks if the given media type has type and subtype that matches the given values.
    static boolean
    matchesTypeAndSubtype(String mediaType, String typeToMatch, String subtypeToMatch)
    Checks if the given media type has type and subtype that matches the given values.
    static boolean
    matchesTypeAndSubtype(String mediaType, Set<String> typesToMatch, String subtypeToMatch)
    Checks if the given media type has type and subtype that matches the given values.
    static String
    toStringWithoutParameters(jakarta.ws.rs.core.MediaType mediaType)
    Get the string value of the given MediaType with only the type/subtype.
    static String
    Strip any parameters from mediaType, returning a value in the format type/subtype.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Method Details

    • isXml

      public static boolean isXml(jakarta.ws.rs.core.MediaType mediaType)
      Checks if the Jakarta Rest media type is "application/xml" or "text/xml", ignoring parameters such that "text/xml; charset=utf-8" is considered XML.

      To use this method, the jakarta.ws.rs:jakarta.ws.rs-api dependency must be present.

      Parameters:
      mediaType - the Jakarta Rest media type to check
      Returns:
      true if the media type is an XML type ignoring any parameters, otherwise false
    • isXml

      public static boolean isXml(String mediaType)
      Checks if the media type is "application/xml" or "text/xml", ignoring parameters such that "text/xml; charset=utf-8" is considered XML.
      Parameters:
      mediaType - the media type to check
      Returns:
      true if the media type is an XML type ignoring any parameters, otherwise false
    • isJson

      public static boolean isJson(jakarta.ws.rs.core.MediaType mediaType)
      Checks if the Jakarta Rest media type is "application/json", ignoring parameters such that "application/json; charset=utf-8" is considered JSON.

      To use this method, the jakarta.ws.rs:jakarta.ws.rs-api dependency must be present.

      Parameters:
      mediaType - the Jakarta Rest media type to check
      Returns:
      true if the media type is JSON ignoring any parameters, otherwise false
    • isJson

      public static boolean isJson(String mediaType)
      Checks if the media type is "application/json", ignoring parameters such that "application/json; charset=utf-8" is considered JSON.
      Parameters:
      mediaType - the media type to check
      Returns:
      true if the media type is JSON ignoring any parameters, otherwise false
    • isPlainText

      public static boolean isPlainText(jakarta.ws.rs.core.MediaType mediaType)
      Checks if the Jakarta Rest media type is "text/plain", ignoring parameters such that "text/plain; version=0.0.4; charset=utf-8" is considered plain text.

      To use this method, the jakarta.ws.rs:jakarta.ws.rs-api dependency must be present.

      Parameters:
      mediaType - the Jakarta Rest media type to check
      Returns:
      true if the media type is plain text ignoring any parameters, otherwise false
    • isPlainText

      public static boolean isPlainText(String mediaType)
      Checks if the media type is "text/plain", ignoring parameters such that "text/plain; version=0.0.4; charset=utf-8" is considered plain text.
      Parameters:
      mediaType - the media type to check
      Returns:
      true if the media type is plain text ignoring any parameters, otherwise false
    • toStringWithoutParameters

      public static String toStringWithoutParameters(jakarta.ws.rs.core.MediaType mediaType)
      Get the string value of the given MediaType with only the type/subtype.

      To use this method, the jakarta.ws.rs:jakarta.ws.rs-api dependency must be present.

      Parameters:
      mediaType - the Jakarta Rest media type to strip parameters from
      Implementation Note:
      This method concatenates the type and subtype of the MediaType because the MediaType#toString requires a Jakarta RS implementation to create a RuntimeDelegate which is then used to convert to a String. Presumably if this method is used, the implementation is available. However, just in case it isn't, this method manually creates the media type string using the type and subtype, since they are just fields in MediaType and don't need a Jakarta RS implementation to be available.
    • withoutParameters

      public static String withoutParameters(String mediaType)
      Strip any parameters from mediaType, returning a value in the format type/subtype.

      This is a convenience method that delegates to Guava's MediaType and which handles parsing the String value to a MediaType, removing the parameters, and converting to a String.

      Parameters:
      mediaType - the media type to strip parameters from
      Returns:
      the "plain" media type as type/subtype
      See Also:
      • MediaType.parse(String)
      • MediaType.withoutParameters()
    • matchesType

      public static boolean matchesType(String mediaType, String typeToMatch)
      Checks if the given media type has a type that matches the given value.
      Parameters:
      mediaType - the media type to check
      typeToMatch - the type to match
      Returns:
      true if the types match, otherwise false
    • matchesSubtype

      public static boolean matchesSubtype(String mediaType, String subtypeToMatch)
      Checks if the given media type has a type that matches the given value.
      Parameters:
      mediaType - the media type to check
      subtypeToMatch - the subtype to match
      Returns:
      true if the subtypes match, otherwise false
    • matchesMediaType

      public static boolean matchesMediaType(jakarta.ws.rs.core.MediaType mediaType, String mediaTypeToMatch)
      Checks if the given media type has a type and subtype that matches the given type/subtype media type. Ignores parameters in mediaType such as "version" and "charset" in text/plain; version=0.0.4; charset=utf-8.

      To use this method, the jakarta.ws.rs:jakarta.ws.rs-api dependency must be present.

      Parameters:
      mediaType - the Jakarta Rest media type to check
      mediaTypeToMatch - the media type to match (must be in exact format type/subtype)
      Returns:
      true if the type and subtype both match ignoring parameters, otherwise false
    • matchesMediaType

      public static boolean matchesMediaType(String mediaType, String mediaTypeToMatch)
      Checks if the given media type has a type and subtype that matches the given type/subtype media type. Ignores parameters in mediaType such as "version" and "charset" in text/plain; version=0.0.4; charset=utf-8.
      Parameters:
      mediaType - the media type to check
      mediaTypeToMatch - the media type to match (must be in exact format type/subtype)
      Returns:
      true if the type and subtype both match ignoring parameters, otherwise false
    • matchesTypeAndSubtype

      public static boolean matchesTypeAndSubtype(jakarta.ws.rs.core.MediaType mediaType, String typeToMatch, String subtypeToMatch)
      Checks if the given media type has type and subtype that matches the given values.

      To use this method, the jakarta.ws.rs:jakarta.ws.rs-api dependency must be present.

      Parameters:
      mediaType - the Jakarta Rest media type to check
      typeToMatch - the type to match
      subtypeToMatch - the subtype to match
      Returns:
      true if the type and subtype both match, otherwise false
    • matchesTypeAndSubtype

      public static boolean matchesTypeAndSubtype(String mediaType, String typeToMatch, String subtypeToMatch)
      Checks if the given media type has type and subtype that matches the given values.
      Parameters:
      mediaType - the media type to check
      typeToMatch - the type to match
      subtypeToMatch - the subtype to match
      Returns:
      true if the type and subtype both match, otherwise false
    • matchesTypeAndSubtype

      public static boolean matchesTypeAndSubtype(jakarta.ws.rs.core.MediaType mediaType, Set<String> typesToMatch, String subtypeToMatch)
      Checks if the given media type has type and subtype that matches the given values.

      This method lets you test for subtypes which can have more than one type. For example, "application/xml" and "text/xml" are both considered valid XML types.

      To use this method, the jakarta.ws.rs:jakarta.ws.rs-api dependency must be present.

      Parameters:
      mediaType - the Jakarta Rest media type to check
      typesToMatch - the types to match (any one of them is considered a match)
      subtypeToMatch - the subtype to match
      Returns:
      true if the type is any of the acceptable types and subtype matches, otherwise false
    • matchesTypeAndSubtype

      public static boolean matchesTypeAndSubtype(String mediaType, Set<String> typesToMatch, String subtypeToMatch)
      Checks if the given media type has type and subtype that matches the given values.

      This method lets you test for subtypes which can have more than one type. For example, "application/xml" and "text/xml" are both considered valid XML types.

      Parameters:
      mediaType - the media type to check
      typesToMatch - the types to match (any one of them is considered a match)
      subtypeToMatch - the subtype to match
      Returns:
      true if the type is any of the acceptable types and subtype matches, otherwise false