|
|
|
@ -1,5 +1,5 @@
@@ -1,5 +1,5 @@
|
|
|
|
|
/* |
|
|
|
|
* Copyright 2002-2012 the original author or authors. |
|
|
|
|
* Copyright 2002-2016 the original author or authors. |
|
|
|
|
* |
|
|
|
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
|
|
|
* you may not use this file except in compliance with the License. |
|
|
|
@ -22,86 +22,97 @@ import java.nio.charset.Charset;
@@ -22,86 +22,97 @@ import java.nio.charset.Charset;
|
|
|
|
|
import org.junit.Before; |
|
|
|
|
import org.junit.Test; |
|
|
|
|
|
|
|
|
|
import org.springframework.http.HttpHeaders; |
|
|
|
|
import org.springframework.http.MediaType; |
|
|
|
|
import org.springframework.http.MockHttpInputMessage; |
|
|
|
|
import org.springframework.http.MockHttpOutputMessage; |
|
|
|
|
|
|
|
|
|
import static org.junit.Assert.*; |
|
|
|
|
|
|
|
|
|
/** @author Arjen Poutsma */ |
|
|
|
|
/** |
|
|
|
|
* @author Arjen Poutsma |
|
|
|
|
* @author Rossen Stoyanchev |
|
|
|
|
*/ |
|
|
|
|
public class StringHttpMessageConverterTests { |
|
|
|
|
|
|
|
|
|
public static final Charset UTF_8 = Charset.forName("UTF-8"); |
|
|
|
|
|
|
|
|
|
public static final MediaType TEXT_PLAIN_UTF_8 = new MediaType("text", "plain", UTF_8); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private StringHttpMessageConverter converter; |
|
|
|
|
|
|
|
|
|
private MockHttpOutputMessage outputMessage; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Before |
|
|
|
|
public void setUp() { |
|
|
|
|
converter = new StringHttpMessageConverter(); |
|
|
|
|
this.converter = new StringHttpMessageConverter(); |
|
|
|
|
this.outputMessage = new MockHttpOutputMessage(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
public void canRead() { |
|
|
|
|
assertTrue(converter.canRead(String.class, new MediaType("text", "plain"))); |
|
|
|
|
assertTrue(this.converter.canRead(String.class, MediaType.TEXT_PLAIN)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
public void canWrite() { |
|
|
|
|
assertTrue(converter.canWrite(String.class, new MediaType("text", "plain"))); |
|
|
|
|
assertTrue(converter.canWrite(String.class, MediaType.ALL)); |
|
|
|
|
assertTrue(this.converter.canWrite(String.class, MediaType.TEXT_PLAIN)); |
|
|
|
|
assertTrue(this.converter.canWrite(String.class, MediaType.ALL)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
public void read() throws IOException { |
|
|
|
|
String body = "Hello World"; |
|
|
|
|
Charset charset = Charset.forName("UTF-8"); |
|
|
|
|
MockHttpInputMessage inputMessage = new MockHttpInputMessage(body.getBytes(charset)); |
|
|
|
|
inputMessage.getHeaders().setContentType(new MediaType("text", "plain", charset)); |
|
|
|
|
String result = converter.read(String.class, inputMessage); |
|
|
|
|
MockHttpInputMessage inputMessage = new MockHttpInputMessage(body.getBytes(UTF_8)); |
|
|
|
|
inputMessage.getHeaders().setContentType(TEXT_PLAIN_UTF_8); |
|
|
|
|
String result = this.converter.read(String.class, inputMessage); |
|
|
|
|
|
|
|
|
|
assertEquals("Invalid result", body, result); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
public void writeDefaultCharset() throws IOException { |
|
|
|
|
Charset iso88591 = Charset.forName("ISO-8859-1"); |
|
|
|
|
MockHttpOutputMessage outputMessage = new MockHttpOutputMessage(); |
|
|
|
|
String body = "H\u00e9llo W\u00f6rld"; |
|
|
|
|
converter.write(body, null, outputMessage); |
|
|
|
|
assertEquals("Invalid result", body, outputMessage.getBodyAsString(iso88591)); |
|
|
|
|
assertEquals("Invalid content-type", new MediaType("text", "plain", iso88591), |
|
|
|
|
outputMessage.getHeaders().getContentType()); |
|
|
|
|
assertEquals("Invalid content-length", body.getBytes(iso88591).length, |
|
|
|
|
outputMessage.getHeaders().getContentLength()); |
|
|
|
|
assertFalse("Invalid accept-charset", outputMessage.getHeaders().getAcceptCharset().isEmpty()); |
|
|
|
|
this.converter.write(body, null, this.outputMessage); |
|
|
|
|
|
|
|
|
|
HttpHeaders headers = this.outputMessage.getHeaders(); |
|
|
|
|
assertEquals(body, this.outputMessage.getBodyAsString(iso88591)); |
|
|
|
|
assertEquals(new MediaType("text", "plain", iso88591), headers.getContentType()); |
|
|
|
|
assertEquals(body.getBytes(iso88591).length, headers.getContentLength()); |
|
|
|
|
assertFalse(headers.getAcceptCharset().isEmpty()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
public void writeUTF8() throws IOException { |
|
|
|
|
Charset utf8 = Charset.forName("UTF-8"); |
|
|
|
|
MediaType contentType = new MediaType("text", "plain", utf8); |
|
|
|
|
MockHttpOutputMessage outputMessage = new MockHttpOutputMessage(); |
|
|
|
|
String body = "H\u00e9llo W\u00f6rld"; |
|
|
|
|
converter.write(body, contentType, outputMessage); |
|
|
|
|
assertEquals("Invalid result", body, outputMessage.getBodyAsString(utf8)); |
|
|
|
|
assertEquals("Invalid content-type", contentType, outputMessage.getHeaders().getContentType()); |
|
|
|
|
assertEquals("Invalid content-length", body.getBytes(utf8).length, |
|
|
|
|
outputMessage.getHeaders().getContentLength()); |
|
|
|
|
assertFalse("Invalid accept-charset", outputMessage.getHeaders().getAcceptCharset().isEmpty()); |
|
|
|
|
this.converter.write(body, TEXT_PLAIN_UTF_8, this.outputMessage); |
|
|
|
|
|
|
|
|
|
HttpHeaders headers = this.outputMessage.getHeaders(); |
|
|
|
|
assertEquals(body, this.outputMessage.getBodyAsString(UTF_8)); |
|
|
|
|
assertEquals(TEXT_PLAIN_UTF_8, headers.getContentType()); |
|
|
|
|
assertEquals(body.getBytes(UTF_8).length, headers.getContentLength()); |
|
|
|
|
assertFalse(headers.getAcceptCharset().isEmpty()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// SPR-8867
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
public void writeOverrideRequestedContentType() throws IOException { |
|
|
|
|
Charset utf8 = Charset.forName("UTF-8"); |
|
|
|
|
MediaType requestedContentType = new MediaType("text", "html"); |
|
|
|
|
MockHttpOutputMessage outputMessage = new MockHttpOutputMessage(); |
|
|
|
|
MediaType contentType = new MediaType("text", "plain", utf8); |
|
|
|
|
outputMessage.getHeaders().setContentType(contentType); |
|
|
|
|
String body = "H\u00e9llo W\u00f6rld"; |
|
|
|
|
converter.write(body, requestedContentType, outputMessage); |
|
|
|
|
assertEquals("Invalid result", body, outputMessage.getBodyAsString(utf8)); |
|
|
|
|
assertEquals("Invalid content-type", contentType, outputMessage.getHeaders().getContentType()); |
|
|
|
|
assertEquals("Invalid content-length", body.getBytes(utf8).length, |
|
|
|
|
outputMessage.getHeaders().getContentLength()); |
|
|
|
|
assertFalse("Invalid accept-charset", outputMessage.getHeaders().getAcceptCharset().isEmpty()); |
|
|
|
|
MediaType requestedContentType = new MediaType("text", "html"); |
|
|
|
|
|
|
|
|
|
HttpHeaders headers = this.outputMessage.getHeaders(); |
|
|
|
|
headers.setContentType(TEXT_PLAIN_UTF_8); |
|
|
|
|
this.converter.write(body, requestedContentType, this.outputMessage); |
|
|
|
|
|
|
|
|
|
assertEquals(body, this.outputMessage.getBodyAsString(UTF_8)); |
|
|
|
|
assertEquals(TEXT_PLAIN_UTF_8, headers.getContentType()); |
|
|
|
|
assertEquals(body.getBytes(UTF_8).length, headers.getContentLength()); |
|
|
|
|
assertFalse(headers.getAcceptCharset().isEmpty()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|