@Test public void fieldLevelJsonView() throws Exception { MockHttpOutputMessage outputMessage = new MockHttpOutputMessage(); JacksonViewBean bean = new JacksonViewBean(); bean.setWithView1("with"); bean.setWithView2("with"); bean.setWithoutView("without"); MappingJacksonValue jacksonValue = new MappingJacksonValue(bean); jacksonValue.setSerializationView(MyJacksonView1.class); this.converter.writeInternal(jacksonValue, null, outputMessage); String result = outputMessage.getBodyAsString(StandardCharsets.UTF_8); assertThat(result, containsString("\"withView1\":\"with\"")); assertThat(result, not(containsString("\"withView2\":\"with\""))); assertThat(result, not(containsString("\"withoutView\":\"without\""))); }
@Test // SPR-13318 public void writeSubType() throws Exception { MockHttpOutputMessage outputMessage = new MockHttpOutputMessage(); MyBean bean = new MyBean(); bean.setString("Foo"); bean.setNumber(42); this.converter.writeInternal(bean, MyInterface.class, outputMessage); String result = outputMessage.getBodyAsString(StandardCharsets.UTF_8); assertTrue(result.contains("\"string\":\"Foo\"")); assertTrue(result.contains("\"number\":42")); }
@Test public void prefixJsonCustom() throws Exception { MockHttpOutputMessage outputMessage = new MockHttpOutputMessage(); this.converter.setJsonPrefix(")))"); this.converter.writeInternal("foo", null, outputMessage); assertEquals(")))\"foo\"", outputMessage.getBodyAsString(StandardCharsets.UTF_8)); }
@Test public void classLevelJsonView() throws Exception { MockHttpOutputMessage outputMessage = new MockHttpOutputMessage(); JacksonViewBean bean = new JacksonViewBean(); bean.setWithView1("with"); bean.setWithView2("with"); bean.setWithoutView("without"); MappingJacksonValue jacksonValue = new MappingJacksonValue(bean); jacksonValue.setSerializationView(MyJacksonView3.class); this.converter.writeInternal(jacksonValue, null, outputMessage); String result = outputMessage.getBodyAsString(StandardCharsets.UTF_8); assertThat(result, not(containsString("\"withView1\":\"with\""))); assertThat(result, not(containsString("\"withView2\":\"with\""))); assertThat(result, containsString("\"withoutView\":\"without\"")); }
@Test public void prefixJson() throws Exception { MockHttpOutputMessage outputMessage = new MockHttpOutputMessage(); this.converter.setPrefixJson(true); this.converter.writeInternal("foo", null, outputMessage); assertEquals(")]}', \"foo\"", outputMessage.getBodyAsString(StandardCharsets.UTF_8)); }
@Test // SPR-13318 public void writeSubTypeList() throws Exception { MockHttpOutputMessage outputMessage = new MockHttpOutputMessage(); List<MyBean> beans = new ArrayList<>(); MyBean foo = new MyBean(); foo.setString("Foo"); foo.setNumber(42); beans.add(foo); MyBean bar = new MyBean(); bar.setString("Bar"); bar.setNumber(123); beans.add(bar); ParameterizedTypeReference<List<MyInterface>> typeReference = new ParameterizedTypeReference<List<MyInterface>>() {}; this.converter.writeInternal(beans, typeReference.getType(), outputMessage); String result = outputMessage.getBodyAsString(StandardCharsets.UTF_8); assertTrue(result.contains("\"string\":\"Foo\"")); assertTrue(result.contains("\"number\":42")); assertTrue(result.contains("\"string\":\"Bar\"")); assertTrue(result.contains("\"number\":123")); }
@Test public void prettyPrintWithSse() throws Exception { MockHttpOutputMessage outputMessage = new MockHttpOutputMessage(); outputMessage.getHeaders().setContentType(MediaType.TEXT_EVENT_STREAM); PrettyPrintBean bean = new PrettyPrintBean(); bean.setName("Jason"); this.converter.setPrettyPrint(true); this.converter.writeInternal(bean, null, outputMessage); String result = outputMessage.getBodyAsString(StandardCharsets.UTF_8); assertEquals("{\ndata: \"name\" : \"Jason\"\ndata:}", result); }
@Test public void filters() throws Exception { MockHttpOutputMessage outputMessage = new MockHttpOutputMessage(); JacksonFilteredBean bean = new JacksonFilteredBean(); bean.setProperty1("value"); bean.setProperty2("value"); MappingJacksonValue jacksonValue = new MappingJacksonValue(bean); FilterProvider filters = new SimpleFilterProvider().addFilter("myJacksonFilter", SimpleBeanPropertyFilter.serializeAllExcept("property2")); jacksonValue.setFilters(filters); this.converter.writeInternal(jacksonValue, null, outputMessage); String result = outputMessage.getBodyAsString(StandardCharsets.UTF_8); assertThat(result, containsString("\"property1\":\"value\"")); assertThat(result, not(containsString("\"property2\":\"value\""))); }
@Test public void prettyPrint() throws Exception { MockHttpOutputMessage outputMessage = new MockHttpOutputMessage(); PrettyPrintBean bean = new PrettyPrintBean(); bean.setName("Jason"); this.converter.setPrettyPrint(true); this.converter.writeInternal(bean, null, outputMessage); String result = outputMessage.getBodyAsString(StandardCharsets.UTF_8); assertEquals("{" + NEWLINE_SYSTEM_PROPERTY + " \"name\" : \"Jason\"" + NEWLINE_SYSTEM_PROPERTY + "}", result); }
@Override protected void writeInternal(final Object object, final Type type, final HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException { if (object instanceof ResponseResult) { super.writeInternal(object, type, outputMessage); } else { final ResponseResult result = ResponseResult.success(object); super.writeInternal(result, type, outputMessage); } }
@Override protected void writeInternal(Object object, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException { super.writeInternal(object, outputMessage); }
@Override protected void writeInternal(Object object, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException { super.writeInternal(object, outputMessage); }
protected void defaultWriteInternal(Object object, @Nullable Type type, HttpOutputMessage outputMessage) throws IOException { super.writeInternal(object, type, outputMessage); }
@Override protected void writeInternal(Object object, Type type, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException { if(object instanceof String){ Charset charset = this.getDefaultCharset(); StreamUtils.copy((String)object, charset, outputMessage.getBody()); }else{ super.writeInternal(object, type, outputMessage); } } };