diff --git a/spring-core/src/main/java/org/springframework/util/MimeTypeUtils.java b/spring-core/src/main/java/org/springframework/util/MimeTypeUtils.java index 89609925bc7d..f7f2d1e3d3c4 100644 --- a/spring-core/src/main/java/org/springframework/util/MimeTypeUtils.java +++ b/spring-core/src/main/java/org/springframework/util/MimeTypeUtils.java @@ -181,6 +181,20 @@ public abstract class MimeTypeUtils { TEXT_XML = new MimeType("text", "xml"); } + /*** + * Whether need cache. + *
For example "multipart/form-data; boundary=----WebKitFormBoundarymKzwdDkWNDNzQFP0", + * this mimeType with random characters, wastes LRU cache space, resulting in severe performance degradation. + * @param mimeType the mime type + * @return whether need cache + */ + private static boolean ensureMimeTypeRequiredCache(String mimeType){ + // TODO constant + if(mimeType.startsWith("multipart/form-data;")) + return false; + return true; + } + /** * Parse the given String into a single {@code MimeType}. @@ -193,7 +207,9 @@ public static MimeType parseMimeType(String mimeType) { if (!StringUtils.hasLength(mimeType)) { throw new InvalidMimeTypeException(mimeType, "'mimeType' must not be empty"); } - return cachedMimeTypes.get(mimeType); + if (ensureMimeTypeRequiredCache(mimeType)) + return cachedMimeTypes.get(mimeType); + return parseMimeTypeInternal(mimeType); } private static MimeType parseMimeTypeInternal(String mimeType) {