Merge branch '5.1.x'

This commit is contained in:
Sam Brannen 2019-07-07 14:49:34 +02:00
commit 8f5b2b2231
4 changed files with 22 additions and 3 deletions

View File

@ -44,6 +44,7 @@ import org.springframework.lang.Nullable;
* @author Rossen Stoyanchev * @author Rossen Stoyanchev
* @author Dimitrios Liapis * @author Dimitrios Liapis
* @author Brian Clozel * @author Brian Clozel
* @author Sam Brannen
* @since 4.0 * @since 4.0
*/ */
public abstract class MimeTypeUtils { public abstract class MimeTypeUtils {
@ -273,10 +274,11 @@ public abstract class MimeTypeUtils {
return Collections.emptyList(); return Collections.emptyList();
} }
return tokenize(mimeTypes).stream() return tokenize(mimeTypes).stream()
.map(MimeTypeUtils::parseMimeType).collect(Collectors.toList()); .filter(StringUtils::hasText)
.map(MimeTypeUtils::parseMimeType)
.collect(Collectors.toList());
} }
/** /**
* Tokenize the given comma-separated string of {@code MimeType} objects * Tokenize the given comma-separated string of {@code MimeType} objects
* into a {@code List<String>}. Unlike simple tokenization by ",", this * into a {@code List<String>}. Unlike simple tokenization by ",", this

View File

@ -303,6 +303,13 @@ public class MimeTypeTests {
assertThat(mimeTypes.size()).as("Invalid amount of mime types").isEqualTo(0); assertThat(mimeTypes.size()).as("Invalid amount of mime types").isEqualTo(0);
} }
@Test // gh-23241
public void parseMimeTypesWithTrailingComma() {
List<MimeType> mimeTypes = MimeTypeUtils.parseMimeTypes("text/plain, text/html,");
assertThat(mimeTypes).as("No mime types returned").isNotNull();
assertThat(mimeTypes.size()).as("Incorrect number of mime types").isEqualTo(2);
}
@Test // SPR-17459 @Test // SPR-17459
public void parseMimeTypesWithQuotedParameters() { public void parseMimeTypesWithQuotedParameters() {
testWithQuotedParameters("foo/bar;param=\",\""); testWithQuotedParameters("foo/bar;param=\",\"");

View File

@ -596,8 +596,10 @@ public class MediaType extends MimeType implements Serializable {
List<String> tokenizedTypes = MimeTypeUtils.tokenize(mediaTypes); List<String> tokenizedTypes = MimeTypeUtils.tokenize(mediaTypes);
List<MediaType> result = new ArrayList<>(tokenizedTypes.size()); List<MediaType> result = new ArrayList<>(tokenizedTypes.size());
for (String type : tokenizedTypes) { for (String type : tokenizedTypes) {
if (StringUtils.hasText(type)) {
result.add(parseMediaType(type)); result.add(parseMediaType(type));
} }
}
return result; return result;
} }

View File

@ -35,6 +35,7 @@ import static org.assertj.core.api.Assertions.within;
/** /**
* @author Arjen Poutsma * @author Arjen Poutsma
* @author Juergen Hoeller * @author Juergen Hoeller
* @author Sam Brannen
*/ */
public class MediaTypeTests { public class MediaTypeTests {
@ -159,6 +160,13 @@ public class MediaTypeTests {
assertThat(mediaTypes.size()).as("Invalid amount of media types").isEqualTo(0); assertThat(mediaTypes.size()).as("Invalid amount of media types").isEqualTo(0);
} }
@Test // gh-23241
public void parseMediaTypesWithTrailingComma() {
List<MediaType> mediaTypes = MediaType.parseMediaTypes("text/plain, text/html, ");
assertThat(mediaTypes).as("No media types returned").isNotNull();
assertThat(mediaTypes.size()).as("Incorrect number of media types").isEqualTo(2);
}
@Test @Test
public void compareTo() { public void compareTo() {
MediaType audioBasic = new MediaType("audio", "basic"); MediaType audioBasic = new MediaType("audio", "basic");