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:
Arjen Poutsma
2017-03-23 10:14:43 +01:00
parent 3d68c496f1
commit fd1db57e05
9 changed files with 38 additions and 36 deletions

View File

@@ -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());
}
/**

View File

@@ -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) {

View File

@@ -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

View File

@@ -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

View File

@@ -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;
}