Change MediaTypeFactory to return Optional
This commit changes the `MediaTypeFactory` to return `Optional<MediaType>` (instead of a plain `MediaType`) for the `getMediaType` methods. Issue: SPR-14908
This commit is contained in:
@@ -103,9 +103,12 @@ public class MediaTypeFactory {
|
||||
* @param resource the resource to introspect
|
||||
* @return the corresponding media type, or {@code null} if none found
|
||||
*/
|
||||
public static MediaType getMediaType(Resource resource) {
|
||||
public static Optional<MediaType> getMediaType(Resource resource) {
|
||||
if (resource == null) {
|
||||
return Optional.empty();
|
||||
}
|
||||
String filename = resource.getFilename();
|
||||
return (filename != null ? getMediaType(filename) : null);
|
||||
return (filename != null ? getMediaType(filename) : Optional.empty());
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -113,9 +116,9 @@ public class MediaTypeFactory {
|
||||
* @param filename the file name plus extension
|
||||
* @return the corresponding media type, or {@code null} if none found
|
||||
*/
|
||||
public static MediaType getMediaType(String filename) {
|
||||
public static Optional<MediaType> getMediaType(String filename) {
|
||||
List<MediaType> mediaTypes = getMediaTypes(filename);
|
||||
return (!mediaTypes.isEmpty() ? mediaTypes.get(0) : null);
|
||||
return (!mediaTypes.isEmpty() ? Optional.of(mediaTypes.get(0)) : Optional.empty());
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -136,8 +136,7 @@ public class ResourceHttpMessageWriter implements ServerHttpMessageWriter<Resour
|
||||
if (type != null && type.isConcrete() && !type.equals(MediaType.APPLICATION_OCTET_STREAM)) {
|
||||
return type;
|
||||
}
|
||||
type = MediaTypeFactory.getMediaType(resource);
|
||||
return type != null ? type : MediaType.APPLICATION_OCTET_STREAM;
|
||||
return MediaTypeFactory.getMediaType(resource).orElse(MediaType.APPLICATION_OCTET_STREAM);
|
||||
}
|
||||
|
||||
private static OptionalLong lengthOf(Resource resource) {
|
||||
|
||||
@@ -102,8 +102,7 @@ public class ResourceHttpMessageConverter extends AbstractHttpMessageConverter<R
|
||||
|
||||
@Override
|
||||
protected MediaType getDefaultContentType(Resource resource) {
|
||||
MediaType mediaType = MediaTypeFactory.getMediaType(resource);
|
||||
return mediaType != null ? mediaType : MediaType.APPLICATION_OCTET_STREAM;
|
||||
return MediaTypeFactory.getMediaType(resource).orElse(MediaType.APPLICATION_OCTET_STREAM);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -87,14 +87,7 @@ public class ResourceRegionHttpMessageConverter extends AbstractGenericHttpMessa
|
||||
resource = regions.iterator().next().getResource();
|
||||
}
|
||||
}
|
||||
MediaType result = null;
|
||||
if (resource != null) {
|
||||
result = MediaTypeFactory.getMediaType(resource);
|
||||
}
|
||||
if (result == null) {
|
||||
return MediaType.APPLICATION_OCTET_STREAM;
|
||||
}
|
||||
return result;
|
||||
return MediaTypeFactory.getMediaType(resource).orElse(MediaType.APPLICATION_OCTET_STREAM);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -18,6 +18,7 @@ package org.springframework.web.accept;
|
||||
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
@@ -112,9 +113,9 @@ public class PathExtensionContentNegotiationStrategy extends AbstractMappingCont
|
||||
protected MediaType handleNoMatch(NativeWebRequest webRequest, String extension)
|
||||
throws HttpMediaTypeNotAcceptableException {
|
||||
|
||||
MediaType mediaType = MediaTypeFactory.getMediaType("file." + extension);
|
||||
if (mediaType != null) {
|
||||
return mediaType;
|
||||
Optional<MediaType> mediaType = MediaTypeFactory.getMediaType("file." + extension);
|
||||
if (mediaType.isPresent()) {
|
||||
return mediaType.get();
|
||||
}
|
||||
if (this.ignoreUnknownExtensions) {
|
||||
return null;
|
||||
@@ -140,7 +141,7 @@ public class PathExtensionContentNegotiationStrategy extends AbstractMappingCont
|
||||
mediaType = lookupMediaType(extension);
|
||||
}
|
||||
if (mediaType == null) {
|
||||
mediaType = MediaTypeFactory.getMediaType(filename);
|
||||
mediaType = MediaTypeFactory.getMediaType(filename).orElse(null);
|
||||
}
|
||||
return mediaType;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user