/src/test/java/com/alibaba/json/bvt/support/spring/FastJsonHttpMessageConverterTest.java

https://github.com/alibaba/fastjson · Java · 201 lines · 147 code · 52 blank · 2 comment · 3 complexity · 81bd6ea74711b6813ac6f73c3e6b9144 MD5 · raw file

  1. package com.alibaba.json.bvt.support.spring;
  2. import java.io.ByteArrayInputStream;
  3. import java.io.ByteArrayOutputStream;
  4. import java.io.IOException;
  5. import java.io.InputStream;
  6. import java.io.OutputStream;
  7. import java.lang.reflect.Method;
  8. import java.nio.charset.Charset;
  9. import java.util.Arrays;
  10. import java.util.Collections;
  11. import junit.framework.TestCase;
  12. import org.junit.Assert;
  13. import org.springframework.http.HttpHeaders;
  14. import org.springframework.http.HttpInputMessage;
  15. import org.springframework.http.HttpOutputMessage;
  16. import org.springframework.http.MediaType;
  17. import com.alibaba.fastjson.serializer.SerializeFilter;
  18. import com.alibaba.fastjson.serializer.SerializerFeature;
  19. import com.alibaba.fastjson.serializer.ValueFilter;
  20. import com.alibaba.fastjson.support.config.FastJsonConfig;
  21. import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
  22. public class FastJsonHttpMessageConverterTest extends TestCase {
  23. @SuppressWarnings("deprecation")
  24. public void test_read() throws Exception {
  25. FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
  26. converter.setCharset(Charset.forName("UTF-8"));
  27. Assert.assertEquals(Charset.forName("UTF-8"), converter.getCharset());
  28. converter.setFeatures(SerializerFeature.BrowserCompatible);
  29. Assert.assertEquals(1, converter.getFeatures().length);
  30. Assert.assertEquals(SerializerFeature.BrowserCompatible,
  31. converter.getFeatures()[0]);
  32. Assert.assertNull(converter.getDateFormat());
  33. converter.setDateFormat("yyyyMMdd");
  34. converter.setFilters(serializeFilter);
  35. Assert.assertEquals(1, converter.getFilters().length);
  36. Assert.assertEquals(serializeFilter, converter.getFilters()[0]);
  37. converter.addSerializeFilter(serializeFilter);
  38. Assert.assertEquals(2, converter.getFilters().length);
  39. converter.addSerializeFilter(null);
  40. converter.setSupportedMediaTypes(Arrays
  41. .asList(new MediaType[] { MediaType.APPLICATION_JSON_UTF8 }));
  42. Assert.assertEquals(1, converter.getSupportedMediaTypes().size());
  43. Method method = FastJsonHttpMessageConverter.class.getDeclaredMethod(
  44. "supports", Class.class);
  45. method.setAccessible(true);
  46. method.invoke(converter, int.class);
  47. HttpInputMessage input = new HttpInputMessage() {
  48. public HttpHeaders getHeaders() {
  49. // TODO Auto-generated method stub
  50. return null;
  51. }
  52. public InputStream getBody() throws IOException {
  53. return new ByteArrayInputStream("{\"id\":123}".getBytes(Charset
  54. .forName("UTF-8")));
  55. }
  56. };
  57. VO vo = (VO) converter.read(VO.class, input);
  58. Assert.assertEquals(123, vo.getId());
  59. final ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
  60. HttpOutputMessage out = new HttpOutputMessage() {
  61. public HttpHeaders getHeaders() {
  62. return new HttpHeaders();
  63. }
  64. public OutputStream getBody() throws IOException {
  65. return byteOut;
  66. }
  67. };
  68. converter.write(vo, MediaType.TEXT_PLAIN, out);
  69. byte[] bytes = byteOut.toByteArray();
  70. Assert.assertEquals("{\"id\":\"123\"}", new String(bytes, "UTF-8"));
  71. }
  72. public void test_1() throws Exception {
  73. FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
  74. Assert.assertNotNull(converter.getFastJsonConfig());
  75. converter.setFastJsonConfig(new FastJsonConfig());
  76. converter.canRead(VO.class, MediaType.APPLICATION_JSON_UTF8);
  77. converter.canWrite(VO.class, MediaType.APPLICATION_JSON_UTF8);
  78. converter.canRead(VO.class, VO.class, MediaType.APPLICATION_JSON_UTF8);
  79. converter.canWrite(VO.class, VO.class, MediaType.APPLICATION_JSON_UTF8);
  80. HttpInputMessage input = new HttpInputMessage() {
  81. public HttpHeaders getHeaders() {
  82. // TODO Auto-generated method stub
  83. return null;
  84. }
  85. public InputStream getBody() throws IOException {
  86. return new ByteArrayInputStream("{\"id\":123}".getBytes(Charset
  87. .forName("UTF-8")));
  88. }
  89. };
  90. VO vo = (VO) converter.read(VO.class, VO.class, input);
  91. Assert.assertEquals(123, vo.getId());
  92. final ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
  93. HttpOutputMessage out = new HttpOutputMessage() {
  94. public HttpHeaders getHeaders() {
  95. return new HttpHeaders();
  96. }
  97. public OutputStream getBody() throws IOException {
  98. return byteOut;
  99. }
  100. };
  101. converter.write(vo, VO.class, MediaType.TEXT_PLAIN, out);
  102. byte[] bytes = byteOut.toByteArray();
  103. Assert.assertEquals("{\"id\":123}", new String(bytes, "UTF-8"));
  104. converter.setSupportedMediaTypes(Collections
  105. .singletonList(MediaType.APPLICATION_JSON));
  106. converter.write(vo, VO.class, null, out);
  107. converter.write(vo, VO.class, MediaType.ALL, out);
  108. HttpOutputMessage out2 = new HttpOutputMessage() {
  109. public HttpHeaders getHeaders() {
  110. return new HttpHeaders() {
  111. private static final long serialVersionUID = 1L;
  112. @Override
  113. public MediaType getContentType() {
  114. return MediaType.APPLICATION_JSON;
  115. }
  116. @Override
  117. public long getContentLength() {
  118. return 1;
  119. }
  120. };
  121. }
  122. public OutputStream getBody() throws IOException {
  123. return byteOut;
  124. }
  125. };
  126. converter.write(vo, VO.class, MediaType.ALL, out2);
  127. }
  128. private SerializeFilter serializeFilter = new ValueFilter() {
  129. @Override
  130. public Object process(Object object, String name, Object value) {
  131. if (value == null) {
  132. return "";
  133. }
  134. if (value instanceof Number) {
  135. return String.valueOf(value);
  136. }
  137. return value;
  138. }
  139. };
  140. public static class VO {
  141. private int id;
  142. public int getId() {
  143. return id;
  144. }
  145. public void setId(int id) {
  146. this.id = id;
  147. }
  148. }
  149. }