From ead0124b393fab17e71f6d879af54a7eefb28d56 Mon Sep 17 00:00:00 2001 From: Rossen Stoyanchev Date: Thu, 8 Aug 2013 09:38:01 -0400 Subject: [PATCH] Fix bug that ignored custom json prefix Issue: SPR-10817 --- .../MappingJackson2HttpMessageConverter.java | 18 ++++++------ .../MappingJacksonHttpMessageConverter.java | 3 +- ...ppingJacksonHttpMessageConverterTests.java | 8 ++--- ...pingJackson2HttpMessageConverterTests.java | 29 +++++++++++++++---- ...ppingJacksonHttpMessageConverterTests.java | 22 ++++++++++++-- 5 files changed, 57 insertions(+), 23 deletions(-) diff --git a/spring-web/src/main/java/org/springframework/http/converter/json/MappingJackson2HttpMessageConverter.java b/spring-web/src/main/java/org/springframework/http/converter/json/MappingJackson2HttpMessageConverter.java index 3db6f95b283..17c1aa3f3ce 100644 --- a/spring-web/src/main/java/org/springframework/http/converter/json/MappingJackson2HttpMessageConverter.java +++ b/spring-web/src/main/java/org/springframework/http/converter/json/MappingJackson2HttpMessageConverter.java @@ -20,14 +20,6 @@ import java.io.IOException; import java.lang.reflect.Type; import java.nio.charset.Charset; -import com.fasterxml.jackson.core.JsonEncoding; -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.core.util.DefaultPrettyPrinter; -import com.fasterxml.jackson.databind.JavaType; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializationFeature; - import org.springframework.http.HttpInputMessage; import org.springframework.http.HttpOutputMessage; import org.springframework.http.MediaType; @@ -37,6 +29,14 @@ import org.springframework.http.converter.HttpMessageNotReadableException; import org.springframework.http.converter.HttpMessageNotWritableException; import org.springframework.util.Assert; +import com.fasterxml.jackson.core.JsonEncoding; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.util.DefaultPrettyPrinter; +import com.fasterxml.jackson.databind.JavaType; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; + /** * Implementation of {@link org.springframework.http.converter.HttpMessageConverter HttpMessageConverter} that * can read and write JSON using Jackson 2.x's {@link ObjectMapper}. @@ -205,7 +205,7 @@ public class MappingJackson2HttpMessageConverter extends AbstractHttpMessageConv try { if (this.jsonPrefix != null) { - jsonGenerator.writeRaw("{} && "); + jsonGenerator.writeRaw(this.jsonPrefix); } this.objectMapper.writeValue(jsonGenerator, object); } diff --git a/spring-web/src/main/java/org/springframework/http/converter/json/MappingJacksonHttpMessageConverter.java b/spring-web/src/main/java/org/springframework/http/converter/json/MappingJacksonHttpMessageConverter.java index 091c09fa1f7..3442e672248 100644 --- a/spring-web/src/main/java/org/springframework/http/converter/json/MappingJacksonHttpMessageConverter.java +++ b/spring-web/src/main/java/org/springframework/http/converter/json/MappingJacksonHttpMessageConverter.java @@ -26,7 +26,6 @@ import org.codehaus.jackson.JsonProcessingException; import org.codehaus.jackson.map.ObjectMapper; import org.codehaus.jackson.map.SerializationConfig; import org.codehaus.jackson.type.JavaType; - import org.springframework.http.HttpInputMessage; import org.springframework.http.HttpOutputMessage; import org.springframework.http.MediaType; @@ -201,7 +200,7 @@ public class MappingJacksonHttpMessageConverter extends AbstractHttpMessageConve try { if (this.jsonPrefix != null) { - jsonGenerator.writeRaw("{} && "); + jsonGenerator.writeRaw(this.jsonPrefix); } this.objectMapper.writeValue(jsonGenerator, object); } diff --git a/spring-web/src/test/java/org/springframework/http/converter/json/AbstractMappingJacksonHttpMessageConverterTests.java b/spring-web/src/test/java/org/springframework/http/converter/json/AbstractMappingJacksonHttpMessageConverterTests.java index da72170f555..e36244bfb8f 100644 --- a/spring-web/src/test/java/org/springframework/http/converter/json/AbstractMappingJacksonHttpMessageConverterTests.java +++ b/spring-web/src/test/java/org/springframework/http/converter/json/AbstractMappingJacksonHttpMessageConverterTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2013 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. @@ -16,10 +16,6 @@ package org.springframework.http.converter.json; -import static org.junit.Assert.assertArrayEquals; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - import java.io.IOException; import java.nio.charset.Charset; import java.util.ArrayList; @@ -35,6 +31,8 @@ import org.springframework.http.MockHttpOutputMessage; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.HttpMessageNotReadableException; +import static org.junit.Assert.*; + /** * Base class for Jackson and Jackson 2 converter tests. * diff --git a/spring-web/src/test/java/org/springframework/http/converter/json/MappingJackson2HttpMessageConverterTests.java b/spring-web/src/test/java/org/springframework/http/converter/json/MappingJackson2HttpMessageConverterTests.java index a755a7458f5..03aad0272a8 100644 --- a/spring-web/src/test/java/org/springframework/http/converter/json/MappingJackson2HttpMessageConverterTests.java +++ b/spring-web/src/test/java/org/springframework/http/converter/json/MappingJackson2HttpMessageConverterTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2013 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,16 +22,17 @@ import java.nio.charset.Charset; import java.util.ArrayList; import java.util.List; -import com.fasterxml.jackson.databind.JavaType; -import com.fasterxml.jackson.databind.ObjectMapper; -import static org.junit.Assert.*; import org.junit.Test; - import org.springframework.core.ParameterizedTypeReference; import org.springframework.http.MediaType; import org.springframework.http.MockHttpInputMessage; import org.springframework.http.MockHttpOutputMessage; +import com.fasterxml.jackson.databind.JavaType; +import com.fasterxml.jackson.databind.ObjectMapper; + +import static org.junit.Assert.*; + /** * Jackson 2.x converter tests. * @@ -112,6 +113,24 @@ public class MappingJackson2HttpMessageConverterTests extends AbstractMappingJac assertEquals("{" + NEWLINE_SYSTEM_PROPERTY + " \"name\" : \"Jason\"" + NEWLINE_SYSTEM_PROPERTY + "}", result); } + @Test + public void prefixJson() throws Exception { + MockHttpOutputMessage outputMessage = new MockHttpOutputMessage(); + getConverter().setPrefixJson(true); + getConverter().writeInternal("foo", outputMessage); + + assertEquals("{} && \"foo\"", outputMessage.getBodyAsString(Charset.forName("UTF-8"))); + } + + @Test + public void prefixJsonCustom() throws Exception { + MockHttpOutputMessage outputMessage = new MockHttpOutputMessage(); + getConverter().setJsonPrefix(")]}',"); + getConverter().writeInternal("foo", outputMessage); + + assertEquals(")]}',\"foo\"", outputMessage.getBodyAsString(Charset.forName("UTF-8"))); + } + public static class PrettyPrintBean { diff --git a/spring-web/src/test/java/org/springframework/http/converter/json/MappingJacksonHttpMessageConverterTests.java b/spring-web/src/test/java/org/springframework/http/converter/json/MappingJacksonHttpMessageConverterTests.java index 424bb885c8c..08d20668b99 100644 --- a/spring-web/src/test/java/org/springframework/http/converter/json/MappingJacksonHttpMessageConverterTests.java +++ b/spring-web/src/test/java/org/springframework/http/converter/json/MappingJacksonHttpMessageConverterTests.java @@ -24,14 +24,14 @@ import java.util.List; import org.codehaus.jackson.map.type.TypeFactory; import org.codehaus.jackson.type.JavaType; -import static org.junit.Assert.*; import org.junit.Test; - import org.springframework.core.ParameterizedTypeReference; import org.springframework.http.MediaType; import org.springframework.http.MockHttpInputMessage; import org.springframework.http.MockHttpOutputMessage; +import static org.junit.Assert.*; + /** * Jackson 1.x converter tests. * @@ -109,6 +109,24 @@ public class MappingJacksonHttpMessageConverterTests extends AbstractMappingJack assertEquals("{" + NEWLINE_SYSTEM_PROPERTY + " \"name\" : \"Jason\"" + NEWLINE_SYSTEM_PROPERTY + "}", result); } + @Test + public void prefixJson() throws Exception { + MockHttpOutputMessage outputMessage = new MockHttpOutputMessage(); + getConverter().setPrefixJson(true); + getConverter().writeInternal("foo", outputMessage); + + assertEquals("{} && \"foo\"", outputMessage.getBodyAsString(Charset.forName("UTF-8"))); + } + + @Test + public void prefixJsonCustom() throws Exception { + MockHttpOutputMessage outputMessage = new MockHttpOutputMessage(); + getConverter().setJsonPrefix(")]}',"); + getConverter().writeInternal("foo", outputMessage); + + assertEquals(")]}',\"foo\"", outputMessage.getBodyAsString(Charset.forName("UTF-8"))); + } + public static class PrettyPrintBean {