Preserve media type parameters when setting charset

Issue: SPR-17040
This commit is contained in:
Mark Hobson
2018-07-14 13:04:13 +01:00
committed by Rossen Stoyanchev
parent 905e3c1f9f
commit 46fe74d2f9
3 changed files with 52 additions and 5 deletions

View File

@@ -21,7 +21,9 @@ import java.io.InputStream;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.rometools.rome.feed.atom.Entry;
import com.rometools.rome.feed.atom.Feed;
@@ -37,6 +39,7 @@ import org.springframework.http.MockHttpInputMessage;
import org.springframework.http.MockHttpOutputMessage;
import org.springframework.tests.XmlContent;
import static java.util.Collections.singletonMap;
import static org.assertj.core.api.Assertions.assertThat;
/**
@@ -106,7 +109,9 @@ public class AtomFeedHttpMessageConverterTests {
MockHttpOutputMessage outputMessage = new MockHttpOutputMessage();
converter.write(feed, null, outputMessage);
assertThat(outputMessage.getHeaders().getContentType()).as("Invalid content-type").isEqualTo(new MediaType("application", "atom+xml", StandardCharsets.UTF_8));
assertThat(outputMessage.getHeaders().getContentType())
.as("Invalid content-type")
.isEqualTo(new MediaType("application", "atom+xml", StandardCharsets.UTF_8));
String expected = "<feed xmlns=\"http://www.w3.org/2005/Atom\">" + "<title>title</title>" +
"<entry><id>id1</id><title>title1</title></entry>" +
"<entry><id>id2</id><title>title2</title></entry></feed>";
@@ -125,7 +130,24 @@ public class AtomFeedHttpMessageConverterTests {
MockHttpOutputMessage outputMessage = new MockHttpOutputMessage();
converter.write(feed, null, outputMessage);
assertThat(outputMessage.getHeaders().getContentType()).as("Invalid content-type").isEqualTo(new MediaType("application", "atom+xml", Charset.forName(encoding)));
assertThat(outputMessage.getHeaders().getContentType())
.as("Invalid content-type")
.isEqualTo(new MediaType("application", "atom+xml", Charset.forName(encoding)));
}
@Test
public void writeOtherContentTypeParameters() throws IOException {
Feed feed = new Feed("atom_1.0");
MockHttpOutputMessage outputMessage = new MockHttpOutputMessage();
converter.write(feed, new MediaType("application", "atom+xml", singletonMap("type", "feed")), outputMessage);
Map<String, String> expectedParameters = new HashMap<>();
expectedParameters.put("charset", "UTF-8");
expectedParameters.put("type", "feed");
assertThat(outputMessage.getHeaders().getContentType())
.as("Invalid content-type")
.isEqualTo(new MediaType("application", "atom+xml", expectedParameters));
}
}

View File

@@ -21,7 +21,9 @@ import java.io.InputStream;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.rometools.rome.feed.rss.Channel;
import com.rometools.rome.feed.rss.Item;
@@ -34,6 +36,7 @@ import org.springframework.http.MockHttpInputMessage;
import org.springframework.http.MockHttpOutputMessage;
import org.springframework.tests.XmlContent;
import static java.util.Collections.singletonMap;
import static org.assertj.core.api.Assertions.assertThat;
/**
@@ -103,7 +106,9 @@ public class RssChannelHttpMessageConverterTests {
MockHttpOutputMessage outputMessage = new MockHttpOutputMessage();
converter.write(channel, null, outputMessage);
assertThat(outputMessage.getHeaders().getContentType()).as("Invalid content-type").isEqualTo(new MediaType("application", "rss+xml", StandardCharsets.UTF_8));
assertThat(outputMessage.getHeaders().getContentType())
.as("Invalid content-type")
.isEqualTo(new MediaType("application", "rss+xml", StandardCharsets.UTF_8));
String expected = "<rss version=\"2.0\">" +
"<channel><title>title</title><link>https://example.com</link><description>description</description>" +
"<item><title>title1</title></item>" +
@@ -129,7 +134,27 @@ public class RssChannelHttpMessageConverterTests {
MockHttpOutputMessage outputMessage = new MockHttpOutputMessage();
converter.write(channel, null, outputMessage);
assertThat(outputMessage.getHeaders().getContentType()).as("Invalid content-type").isEqualTo(new MediaType("application", "rss+xml", Charset.forName(encoding)));
assertThat(outputMessage.getHeaders().getContentType())
.as("Invalid content-type")
.isEqualTo(new MediaType("application", "rss+xml", Charset.forName(encoding)));
}
@Test
public void writeOtherContentTypeParameters() throws IOException {
Channel channel = new Channel("rss_2.0");
channel.setTitle("title");
channel.setLink("http://example.com");
channel.setDescription("description");
MockHttpOutputMessage outputMessage = new MockHttpOutputMessage();
converter.write(channel, new MediaType("application", "rss+xml", singletonMap("x", "y")), outputMessage);
Map<String, String> expectedParameters = new HashMap<>();
expectedParameters.put("charset", "UTF-8");
expectedParameters.put("x", "y");
assertThat(outputMessage.getHeaders().getContentType())
.as("Invalid content-type")
.isEqualTo(new MediaType("application", "rss+xml", expectedParameters));
}
}