Add tests for Jackson @JSONView when using XML serialization
This commit also fixes the AbstractMappingJacksonResponseBodyAdvice Javadoc. Issue: SPR-12149
This commit is contained in:
parent
7953c5fd88
commit
1c2857d15e
|
|
@ -20,7 +20,6 @@ import org.springframework.core.MethodParameter;
|
|||
import org.springframework.http.MediaType;
|
||||
import org.springframework.http.converter.HttpMessageConverter;
|
||||
import org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter;
|
||||
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
|
||||
import org.springframework.http.converter.json.MappingJacksonValue;
|
||||
import org.springframework.http.server.ServerHttpRequest;
|
||||
import org.springframework.http.server.ServerHttpResponse;
|
||||
|
|
@ -28,9 +27,10 @@ import org.springframework.http.server.ServerHttpResponse;
|
|||
/**
|
||||
* A convenient base class for {@code ResponseBodyAdvice} implementations
|
||||
* that customize the response before JSON serialization with
|
||||
* {@link MappingJackson2HttpMessageConverter}.
|
||||
* {@link AbstractJackson2HttpMessageConverter}'s concrete subclasses.
|
||||
*
|
||||
* @author Rossen Stoyanchev
|
||||
* @author Sebastien Deleuze
|
||||
* @since 4.1
|
||||
*/
|
||||
public abstract class AbstractMappingJacksonResponseBodyAdvice implements ResponseBodyAdvice<Object> {
|
||||
|
|
|
|||
|
|
@ -38,6 +38,7 @@ import org.springframework.http.converter.HttpMessageNotReadableException;
|
|||
import org.springframework.http.converter.StringHttpMessageConverter;
|
||||
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
|
||||
import org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter;
|
||||
import org.springframework.http.converter.xml.MappingJackson2XmlHttpMessageConverter;
|
||||
import org.springframework.mock.web.test.MockHttpServletRequest;
|
||||
import org.springframework.mock.web.test.MockHttpServletResponse;
|
||||
import org.springframework.util.MultiValueMap;
|
||||
|
|
@ -64,6 +65,7 @@ import static org.junit.Assert.*;
|
|||
* <p>Also see {@link RequestResponseBodyMethodProcessorMockTests}.
|
||||
*
|
||||
* @author Rossen Stoyanchev
|
||||
* @author Sebastien Deleuze
|
||||
*/
|
||||
public class RequestResponseBodyMethodProcessorTests {
|
||||
|
||||
|
|
@ -303,7 +305,7 @@ public class RequestResponseBodyMethodProcessorTests {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void jacksonJsonViewWithResponseBody() throws Exception {
|
||||
public void jacksonJsonViewWithResponseBodyAndJsonMessageConverter() throws Exception {
|
||||
Method method = JacksonViewController.class.getMethod("handleResponseBody");
|
||||
HandlerMethod handlerMethod = new HandlerMethod(new JacksonViewController(), method);
|
||||
MethodParameter methodReturnType = handlerMethod.getReturnType();
|
||||
|
|
@ -324,7 +326,7 @@ public class RequestResponseBodyMethodProcessorTests {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void jacksonJsonViewWithResponseEntity() throws Exception {
|
||||
public void jacksonJsonViewWithResponseEntityAndJsonMessageConverter() throws Exception {
|
||||
Method method = JacksonViewController.class.getMethod("handleResponseEntity");
|
||||
HandlerMethod handlerMethod = new HandlerMethod(new JacksonViewController(), method);
|
||||
MethodParameter methodReturnType = handlerMethod.getReturnType();
|
||||
|
|
@ -344,6 +346,52 @@ public class RequestResponseBodyMethodProcessorTests {
|
|||
assertTrue(content.contains("\"withoutView\":\"without\""));
|
||||
}
|
||||
|
||||
// SPR-12149
|
||||
|
||||
@Test
|
||||
public void jacksonJsonViewWithResponseBodyAndXmlMessageConverter() throws Exception {
|
||||
Method method = JacksonViewController.class.getMethod("handleResponseBody");
|
||||
HandlerMethod handlerMethod = new HandlerMethod(new JacksonViewController(), method);
|
||||
MethodParameter methodReturnType = handlerMethod.getReturnType();
|
||||
|
||||
List<HttpMessageConverter<?>> converters = new ArrayList<HttpMessageConverter<?>>();
|
||||
converters.add(new MappingJackson2XmlHttpMessageConverter());
|
||||
|
||||
RequestResponseBodyMethodProcessor processor = new RequestResponseBodyMethodProcessor(
|
||||
converters, null, Arrays.asList(new JsonViewResponseBodyAdvice()));
|
||||
|
||||
Object returnValue = new JacksonViewController().handleResponseBody();
|
||||
processor.handleReturnValue(returnValue, methodReturnType, this.mavContainer, this.webRequest);
|
||||
|
||||
String content = this.servletResponse.getContentAsString();
|
||||
assertFalse(content.contains("<withView1>with</withView1>"));
|
||||
assertTrue(content.contains("<withView2>with</withView2>"));
|
||||
assertTrue(content.contains("<withoutView>without</withoutView>"));
|
||||
}
|
||||
|
||||
// SPR-12149
|
||||
|
||||
@Test
|
||||
public void jacksonJsonViewWithResponseEntityAndXmlMessageConverter() throws Exception {
|
||||
Method method = JacksonViewController.class.getMethod("handleResponseEntity");
|
||||
HandlerMethod handlerMethod = new HandlerMethod(new JacksonViewController(), method);
|
||||
MethodParameter methodReturnType = handlerMethod.getReturnType();
|
||||
|
||||
List<HttpMessageConverter<?>> converters = new ArrayList<HttpMessageConverter<?>>();
|
||||
converters.add(new MappingJackson2XmlHttpMessageConverter());
|
||||
|
||||
HttpEntityMethodProcessor processor = new HttpEntityMethodProcessor(
|
||||
converters, null, Arrays.asList(new JsonViewResponseBodyAdvice()));
|
||||
|
||||
Object returnValue = new JacksonViewController().handleResponseEntity();
|
||||
processor.handleReturnValue(returnValue, methodReturnType, this.mavContainer, this.webRequest);
|
||||
|
||||
String content = this.servletResponse.getContentAsString();
|
||||
assertFalse(content.contains("<withView1>with</withView1>"));
|
||||
assertTrue(content.contains("<withView2>with</withView2>"));
|
||||
assertTrue(content.contains("<withoutView>without</withoutView>"));
|
||||
}
|
||||
|
||||
|
||||
public String handle(
|
||||
@RequestBody List<SimpleBean> list,
|
||||
|
|
|
|||
Loading…
Reference in New Issue