57
57
public final class MediaTypeRegistry {
58
58
private static Map <String , MediaType > formatToMediaType = Map .of ();
59
59
private static Map <String , MediaType > typeWithSubtypeToMediaType = Map .of ();
60
+ private static Map <String , MediaType > knownStringsToMediaType = Map .of ();
60
61
61
62
// Default mediaType singleton
62
63
private static MediaType DEFAULT_MEDIA_TYPE ;
@@ -84,6 +85,8 @@ private static void register(MediaType[] acceptedMediaTypes, Map<String, MediaTy
84
85
// ensures the map is not overwritten:
85
86
Map <String , MediaType > typeMap = new HashMap <>(typeWithSubtypeToMediaType );
86
87
Map <String , MediaType > formatMap = new HashMap <>(formatToMediaType );
88
+ Map <String , MediaType > knownStringMap = new HashMap <>(knownStringsToMediaType );
89
+
87
90
for (MediaType mediaType : acceptedMediaTypes ) {
88
91
if (formatMap .containsKey (mediaType .format ())) {
89
92
throw new IllegalArgumentException ("unable to register mediaType: [" + mediaType .format () + "]. Type already exists." );
@@ -107,13 +110,24 @@ private static void register(MediaType[] acceptedMediaTypes, Map<String, MediaTy
107
110
MediaType mediaType = entry .getValue ();
108
111
typeMap .put (typeWithSubtype , mediaType );
109
112
formatMap .putIfAbsent (mediaType .format (), mediaType ); // ignore if the additional type mapping already exists
113
+ knownStringMap .put (mediaType .mediaType (), mediaType );
114
+ knownStringMap .put (mediaType .mediaTypeWithoutParameters (), mediaType );
110
115
}
111
116
112
117
formatToMediaType = Map .copyOf (formatMap );
113
118
typeWithSubtypeToMediaType = Map .copyOf (typeMap );
119
+ knownStringsToMediaType = Map .copyOf (knownStringMap );
114
120
}
115
121
116
122
public static MediaType fromMediaType (String mediaType ) {
123
+ if (mediaType == null ) {
124
+ return null ;
125
+ }
126
+ // Skip parsing if the string is an exact match for any known string value
127
+ final MediaType knownMediaType = knownStringsToMediaType .get (mediaType );
128
+ if (knownMediaType != null ) {
129
+ return knownMediaType ;
130
+ }
117
131
ParsedMediaType parsedMediaType = parseMediaType (mediaType );
118
132
return parsedMediaType != null ? parsedMediaType .getMediaType () : null ;
119
133
}
0 commit comments