From be4e6984836a087f52a160f0c92964a64937d814 Mon Sep 17 00:00:00 2001 From: Rossen Stoyanchev Date: Thu, 12 Jan 2012 17:13:11 -0500 Subject: [PATCH] SPR-9021 Correct issue in comparing Accept header media types. When checking for an exact match of Accept header media types additional parameters such as quality need to be excluded. For example "*/*" matches "*/*;q=0.9". --- .../mvc/condition/ProducesRequestCondition.java | 6 ++++-- .../condition/ProducesRequestConditionTests.java | 14 ++++++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/mvc/condition/ProducesRequestCondition.java b/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/mvc/condition/ProducesRequestCondition.java index 0e46ffe4e1e..78cee038273 100644 --- a/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/mvc/condition/ProducesRequestCondition.java +++ b/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/mvc/condition/ProducesRequestCondition.java @@ -173,7 +173,7 @@ public final class ProducesRequestCondition extends AbstractRequestCondition *
  • Sort 'Accept' header media types by quality value via * {@link MediaType#sortByQualityValue(List)} and iterate the list. - *
  • Get the lowest index of matching media types from each "produces" + *
  • Get the first index of matching media types in each "produces" * condition first matching with {@link MediaType#equals(Object)} and * then with {@link MediaType#includes(MediaType)}. *
  • If a lower index is found, the condition at that index wins. @@ -220,7 +220,9 @@ public final class ProducesRequestCondition extends AbstractRequestCondition 0); } + // SPR-9021 + + @Test + public void compareToMediaTypeAllWithParameter() { + MockHttpServletRequest request = new MockHttpServletRequest(); + request.addHeader("Accept", "*/*;q=0.9"); + + ProducesRequestCondition condition1 = new ProducesRequestCondition(); + ProducesRequestCondition condition2 = new ProducesRequestCondition("application/json"); + + assertTrue(condition1.compareTo(condition2, request) < 0); + assertTrue(condition2.compareTo(condition1, request) > 0); + } + @Test public void compareToEqualMatch() { MockHttpServletRequest request = new MockHttpServletRequest();