Skip to content

Commit

Permalink
Rename ResponseBodyInterceptor to ResponseBodyAdvice
Browse files Browse the repository at this point in the history
Issue: SPR-10859
  • Loading branch information
rstoyanchev committed May 30, 2014
1 parent 2655c50 commit c9d0ebd
Show file tree
Hide file tree
Showing 17 changed files with 123 additions and 121 deletions.
Expand Up @@ -19,7 +19,7 @@
import java.util.List;
import java.util.Properties;

import org.springframework.web.servlet.mvc.method.annotation.JsonViewResponseBodyInterceptor;
import org.springframework.web.servlet.mvc.method.annotation.JsonViewResponseBodyAdvice;
import org.springframework.http.converter.json.GsonHttpMessageConverter;
import org.w3c.dom.Element;

Expand Down Expand Up @@ -201,7 +201,7 @@ else if (element.hasAttribute("enableMatrixVariables")) {
handlerAdapterDef.getPropertyValues().add("contentNegotiationManager", contentNegotiationManager);
handlerAdapterDef.getPropertyValues().add("webBindingInitializer", bindingDef);
handlerAdapterDef.getPropertyValues().add("messageConverters", messageConverters);
addResponseBodyInterceptors(handlerAdapterDef);
addResponseBodyAdvice(handlerAdapterDef);

if (element.hasAttribute("ignore-default-model-on-redirect")) {
Boolean ignoreDefaultModel = Boolean.valueOf(element.getAttribute("ignore-default-model-on-redirect"));
Expand Down Expand Up @@ -253,7 +253,7 @@ else if (element.hasAttribute("ignoreDefaultModelOnRedirect")) {
exceptionHandlerExceptionResolver.getPropertyValues().add("contentNegotiationManager", contentNegotiationManager);
exceptionHandlerExceptionResolver.getPropertyValues().add("messageConverters", messageConverters);
exceptionHandlerExceptionResolver.getPropertyValues().add("order", 0);
addResponseBodyInterceptors(exceptionHandlerExceptionResolver);
addResponseBodyAdvice(exceptionHandlerExceptionResolver);

String methodExceptionResolverName =
parserContext.getReaderContext().registerWithGeneratedName(exceptionHandlerExceptionResolver);
Expand Down Expand Up @@ -288,10 +288,10 @@ else if (element.hasAttribute("ignoreDefaultModelOnRedirect")) {
return null;
}

protected void addResponseBodyInterceptors(RootBeanDefinition beanDef) {
protected void addResponseBodyAdvice(RootBeanDefinition beanDef) {
if (jackson2Present) {
beanDef.getPropertyValues().add("responseBodyInterceptors",
new RootBeanDefinition(JsonViewResponseBodyInterceptor.class));
beanDef.getPropertyValues().add("responseBodyAdvice",
new RootBeanDefinition(JsonViewResponseBodyAdvice.class));
}
}

Expand Down
Expand Up @@ -17,7 +17,6 @@
package org.springframework.web.servlet.config.annotation;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
Expand Down Expand Up @@ -76,10 +75,10 @@
import org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter;
import org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver;
import org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver;
import org.springframework.web.servlet.mvc.method.annotation.JsonViewResponseBodyInterceptor;
import org.springframework.web.servlet.mvc.method.annotation.JsonViewResponseBodyAdvice;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyInterceptor;
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;
import org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver;
import org.springframework.web.servlet.resource.ResourceUrlProvider;
import org.springframework.web.servlet.resource.ResourceUrlProviderExposingInterceptor;
Expand Down Expand Up @@ -425,9 +424,9 @@ public RequestMappingHandlerAdapter requestMappingHandlerAdapter() {
adapter.setCustomReturnValueHandlers(returnValueHandlers);

if (jackson2Present) {
List<ResponseBodyInterceptor<?>> interceptors = new ArrayList<ResponseBodyInterceptor<?>>();
interceptors.add(new JsonViewResponseBodyInterceptor());
adapter.setResponseBodyInterceptors(interceptors);
List<ResponseBodyAdvice<?>> interceptors = new ArrayList<ResponseBodyAdvice<?>>();
interceptors.add(new JsonViewResponseBodyAdvice());
adapter.setResponseBodyAdvice(interceptors);
}

AsyncSupportConfigurer configurer = new AsyncSupportConfigurer();
Expand Down Expand Up @@ -712,9 +711,9 @@ protected final void addDefaultHandlerExceptionResolvers(List<HandlerExceptionRe
exceptionHandlerExceptionResolver.setContentNegotiationManager(mvcContentNegotiationManager());
exceptionHandlerExceptionResolver.setMessageConverters(getMessageConverters());
if (jackson2Present) {
List<ResponseBodyInterceptor<?>> interceptors = new ArrayList<ResponseBodyInterceptor<?>>();
interceptors.add(new JsonViewResponseBodyInterceptor());
exceptionHandlerExceptionResolver.setResponseBodyInterceptors(interceptors);
List<ResponseBodyAdvice<?>> interceptors = new ArrayList<ResponseBodyAdvice<?>>();
interceptors.add(new JsonViewResponseBodyAdvice());
exceptionHandlerExceptionResolver.setResponseBodyAdvice(interceptors);
}
exceptionHandlerExceptionResolver.afterPropertiesSet();

Expand Down
Expand Up @@ -29,7 +29,7 @@
import java.util.Collection;

/**
* A convenient base class for a {@code ResponseBodyInterceptor} to instruct the
* A convenient base class for a {@code ResponseBodyAdvice} to instruct the
* {@link org.springframework.http.converter.json.MappingJackson2HttpMessageConverter
* MappingJackson2HttpMessageConverter} to serialize with JSONP formatting.
*
Expand All @@ -43,12 +43,12 @@
* @author Rossen Stoyanchev
* @since 4.1
*/
public abstract class AbstractJsonpResponseBodyInterceptor extends AbstractMappingJacksonResponseBodyInterceptor {
public abstract class AbstractJsonpResponseBodyAdvice extends AbstractMappingJacksonResponseBodyAdvice {

private final String[] jsonpQueryParamNames;


protected AbstractJsonpResponseBodyInterceptor(Collection<String> queryParamNames) {
protected AbstractJsonpResponseBodyAdvice(Collection<String> queryParamNames) {
Assert.isTrue(!CollectionUtils.isEmpty(queryParamNames), "At least one query param name is required");
this.jsonpQueryParamNames = queryParamNames.toArray(new String[queryParamNames.size()]);
}
Expand Down
Expand Up @@ -25,19 +25,19 @@
import org.springframework.http.server.ServerHttpResponse;

/**
* A convenient base class for {@code ResponseBodyInterceptor} implementations
* A convenient base class for {@code ResponseBodyAdvice} implementations
* that customize the response before JSON serialization with
* {@link org.springframework.http.converter.json.MappingJackson2HttpMessageConverter
* MappingJackson2HttpMessageConverter}.
*
* @author Rossen Stoyanchev
* @since 4.1
*/
public abstract class AbstractMappingJacksonResponseBodyInterceptor
implements ResponseBodyInterceptor<Object> {
public abstract class AbstractMappingJacksonResponseBodyAdvice
implements ResponseBodyAdvice<Object> {


protected AbstractMappingJacksonResponseBodyInterceptor() {
protected AbstractMappingJacksonResponseBodyAdvice() {
}


Expand Down
Expand Up @@ -31,7 +31,6 @@
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.server.ServletServerHttpRequest;
import org.springframework.http.server.ServletServerHttpResponse;
import org.springframework.util.ClassUtils;
import org.springframework.util.CollectionUtils;
import org.springframework.web.HttpMediaTypeNotAcceptableException;
import org.springframework.web.accept.ContentNegotiationManager;
Expand All @@ -55,7 +54,7 @@ public abstract class AbstractMessageConverterMethodProcessor extends AbstractMe

private final ContentNegotiationManager contentNegotiationManager;

private final ResponseBodyInterceptorChain interceptorChain;
private final ResponseBodyAdviceChain adviceChain;


protected AbstractMessageConverterMethodProcessor(List<HttpMessageConverter<?>> messageConverters) {
Expand All @@ -68,11 +67,11 @@ protected AbstractMessageConverterMethodProcessor(List<HttpMessageConverter<?>>
}

protected AbstractMessageConverterMethodProcessor(List<HttpMessageConverter<?>> messageConverters,
ContentNegotiationManager manager, List<Object> responseBodyInterceptors) {
ContentNegotiationManager manager, List<Object> responseBodyAdvice) {

super(messageConverters);
this.contentNegotiationManager = (manager != null ? manager : new ContentNegotiationManager());
this.interceptorChain = new ResponseBodyInterceptorChain(responseBodyInterceptors);
this.adviceChain = new ResponseBodyAdviceChain(responseBodyAdvice);
}


Expand Down Expand Up @@ -149,7 +148,7 @@ else if (mediaType.equals(MediaType.ALL) || mediaType.equals(MEDIA_TYPE_APPLICAT
selectedMediaType = selectedMediaType.removeQualityValue();
for (HttpMessageConverter<?> messageConverter : this.messageConverters) {
if (messageConverter.canWrite(returnValueClass, selectedMediaType)) {
returnValue = this.interceptorChain.invoke(returnValue, returnType, selectedMediaType,
returnValue = this.adviceChain.invoke(returnValue, returnType, selectedMediaType,
(Class<HttpMessageConverter<?>>) messageConverter.getClass(), inputMessage, outputMessage);
((HttpMessageConverter<T>) messageConverter).write(returnValue, selectedMediaType, outputMessage);
if (logger.isDebugEnabled()) {
Expand Down
Expand Up @@ -79,7 +79,7 @@ public class ExceptionHandlerExceptionResolver extends AbstractHandlerMethodExce

private ContentNegotiationManager contentNegotiationManager = new ContentNegotiationManager();

private final List<Object> responseBodyInterceptors = new ArrayList<Object>();
private final List<Object> responseBodyAdvice = new ArrayList<Object>();


private final Map<Class<?>, ExceptionHandlerMethodResolver> exceptionHandlerCache =
Expand Down Expand Up @@ -110,15 +110,15 @@ public ExceptionHandlerExceptionResolver() {
}

/**
* Add one or more interceptors to be invoked after the execution of a controller
* Add one or more components to be invoked after the execution of a controller
* method annotated with {@code @ResponseBody} or returning {@code ResponseEntity}
* but before the body is written to the response with the selected
* {@code HttpMessageConverter}.
*/
public void setResponseBodyInterceptors(List<ResponseBodyInterceptor<?>> responseBodyInterceptors) {
this.responseBodyInterceptors.clear();
if (responseBodyInterceptors != null) {
this.responseBodyInterceptors.addAll(responseBodyInterceptors);
public void setResponseBodyAdvice(List<ResponseBodyAdvice<?>> responseBodyAdvice) {
this.responseBodyAdvice.clear();
if (responseBodyAdvice != null) {
this.responseBodyAdvice.addAll(responseBodyAdvice);
}
}

Expand Down Expand Up @@ -250,7 +250,7 @@ public ApplicationContext getApplicationContext() {
@Override
public void afterPropertiesSet() {

// Do this first, it may add ResponseBody interceptors
// Do this first, it may add ResponseBodyAdvice beans
initExceptionHandlerAdviceCache();

if (this.argumentResolvers == null) {
Expand All @@ -271,18 +271,18 @@ private void initExceptionHandlerAdviceCache() {
logger.debug("Looking for exception mappings: " + getApplicationContext());
}

List<ControllerAdviceBean> beans = ControllerAdviceBean.findAnnotatedBeans(getApplicationContext());
Collections.sort(beans, new OrderComparator());
List<ControllerAdviceBean> adviceBeans = ControllerAdviceBean.findAnnotatedBeans(getApplicationContext());
Collections.sort(adviceBeans, new OrderComparator());

for (ControllerAdviceBean bean : beans) {
ExceptionHandlerMethodResolver resolver = new ExceptionHandlerMethodResolver(bean.getBeanType());
for (ControllerAdviceBean adviceBean : adviceBeans) {
ExceptionHandlerMethodResolver resolver = new ExceptionHandlerMethodResolver(adviceBean.getBeanType());
if (resolver.hasExceptionMappings()) {
this.exceptionHandlerAdviceCache.put(bean, resolver);
logger.info("Detected @ExceptionHandler methods in " + bean);
this.exceptionHandlerAdviceCache.put(adviceBean, resolver);
logger.info("Detected @ExceptionHandler methods in " + adviceBean);
}
if (ResponseBodyInterceptor.class.isAssignableFrom(bean.getBeanType())) {
this.responseBodyInterceptors.add(bean);
logger.info("Detected ResponseBodyInterceptor implementation in " + bean);
if (ResponseBodyAdvice.class.isAssignableFrom(adviceBean.getBeanType())) {
this.responseBodyAdvice.add(adviceBean);
logger.info("Detected ResponseBodyAdvice implementation in " + adviceBean);
}
}
}
Expand Down Expand Up @@ -318,12 +318,12 @@ protected List<HandlerMethodReturnValueHandler> getDefaultReturnValueHandlers()
handlers.add(new ModelMethodProcessor());
handlers.add(new ViewMethodReturnValueHandler());
handlers.add(new HttpEntityMethodProcessor(
getMessageConverters(), this.contentNegotiationManager, this.responseBodyInterceptors));
getMessageConverters(), this.contentNegotiationManager, this.responseBodyAdvice));

// Annotation-based return value types
handlers.add(new ModelAttributeMethodProcessor(false));
handlers.add(new RequestResponseBodyMethodProcessor(
getMessageConverters(), this.contentNegotiationManager, this.responseBodyInterceptors));
getMessageConverters(), this.contentNegotiationManager, this.responseBodyAdvice));

// Multi-purpose return value types
handlers.add(new ViewNameMethodReturnValueHandler());
Expand Down
Expand Up @@ -61,8 +61,8 @@ public HttpEntityMethodProcessor(List<HttpMessageConverter<?>> messageConverters
}

public HttpEntityMethodProcessor(List<HttpMessageConverter<?>> messageConverters,
ContentNegotiationManager contentNegotiationManager, List<Object> responseBodyInterceptors) {
super(messageConverters, contentNegotiationManager, responseBodyInterceptors);
ContentNegotiationManager contentNegotiationManager, List<Object> responseBodyAdvice) {
super(messageConverters, contentNegotiationManager, responseBodyAdvice);
}


Expand Down
Expand Up @@ -26,7 +26,7 @@
import org.springframework.util.Assert;

/**
* A {@code ResponseBodyInterceptor} implementation that adds support for
* A {@code ResponseBodyAdvice} implementation that adds support for
* Jackson's {@code @JsonView} annotation declared on a Spring MVC
* {@code @RequestMapping} or {@code @ExceptionHandler} method. The serialization
* view specified in the annotation will be passed in to the
Expand All @@ -38,7 +38,7 @@
*
* @see com.fasterxml.jackson.databind.ObjectMapper#writerWithView(Class)
*/
public class JsonViewResponseBodyInterceptor extends AbstractMappingJacksonResponseBodyInterceptor {
public class JsonViewResponseBodyAdvice extends AbstractMappingJacksonResponseBodyAdvice {


@Override
Expand Down
Expand Up @@ -132,7 +132,7 @@ public class RequestMappingHandlerAdapter extends AbstractHandlerMethodAdapter

private List<HttpMessageConverter<?>> messageConverters;

private List<Object> responseBodyInterceptors = new ArrayList<Object>();
private List<Object> responseBodyAdvice = new ArrayList<Object>();

private WebBindingInitializer webBindingInitializer;

Expand Down Expand Up @@ -334,15 +334,15 @@ public List<HttpMessageConverter<?>> getMessageConverters() {
}

/**
* Add one or more interceptors to be invoked after the execution of a controller
* method annotated with {@code @ResponseBody} or returning {@code ResponseEntity}
* but before the body is written to the response with the selected
* {@code HttpMessageConverter}.
* Add one or more components to modify the response after the execution of a
* controller method annotated with {@code @ResponseBody}, or a method returning
* {@code ResponseEntity} and before the body is written to the response with
* the selected {@code HttpMessageConverter}.
*/
public void setResponseBodyInterceptors(List<ResponseBodyInterceptor<?>> responseBodyInterceptors) {
this.responseBodyInterceptors.clear();
if (responseBodyInterceptors != null) {
this.responseBodyInterceptors.addAll(responseBodyInterceptors);
public void setResponseBodyAdvice(List<ResponseBodyAdvice<?>> responseBodyAdvice) {
this.responseBodyAdvice.clear();
if (responseBodyAdvice != null) {
this.responseBodyAdvice.addAll(responseBodyAdvice);
}
}

Expand Down Expand Up @@ -498,7 +498,7 @@ protected ConfigurableBeanFactory getBeanFactory() {
@Override
public void afterPropertiesSet() {

// Do this first, it may add ResponseBody interceptors
// Do this first, it may add ResponseBody advice beans
initControllerAdviceCache();

if (this.argumentResolvers == null) {
Expand Down Expand Up @@ -526,7 +526,7 @@ private void initControllerAdviceCache() {
List<ControllerAdviceBean> beans = ControllerAdviceBean.findAnnotatedBeans(getApplicationContext());
Collections.sort(beans, new OrderComparator());

List<Object> interceptorBeans = new ArrayList<Object>();
List<Object> responseBodyAdviceBeans = new ArrayList<Object>();

for (ControllerAdviceBean bean : beans) {
Set<Method> attrMethods = HandlerMethodSelector.selectMethods(bean.getBeanType(), MODEL_ATTRIBUTE_METHODS);
Expand All @@ -539,14 +539,14 @@ private void initControllerAdviceCache() {
this.initBinderAdviceCache.put(bean, binderMethods);
logger.info("Detected @InitBinder methods in " + bean);
}
if (ResponseBodyInterceptor.class.isAssignableFrom(bean.getBeanType())) {
interceptorBeans.add(bean);
logger.info("Detected ResponseBodyInterceptor implementation in " + bean);
if (ResponseBodyAdvice.class.isAssignableFrom(bean.getBeanType())) {
responseBodyAdviceBeans.add(bean);
logger.info("Detected ResponseBodyAdvice bean in " + bean);
}
}

if (!interceptorBeans.isEmpty()) {
this.responseBodyInterceptors.addAll(0, interceptorBeans);
if (!responseBodyAdviceBeans.isEmpty()) {
this.responseBodyAdvice.addAll(0, responseBodyAdviceBeans);
}
}

Expand Down Expand Up @@ -638,7 +638,7 @@ private List<HandlerMethodReturnValueHandler> getDefaultReturnValueHandlers() {
handlers.add(new ModelMethodProcessor());
handlers.add(new ViewMethodReturnValueHandler());
handlers.add(new HttpEntityMethodProcessor(
getMessageConverters(), this.contentNegotiationManager, this.responseBodyInterceptors));
getMessageConverters(), this.contentNegotiationManager, this.responseBodyAdvice));
handlers.add(new HttpHeadersReturnValueHandler());
handlers.add(new CallableMethodReturnValueHandler());
handlers.add(new DeferredResultMethodReturnValueHandler());
Expand All @@ -648,7 +648,7 @@ private List<HandlerMethodReturnValueHandler> getDefaultReturnValueHandlers() {
// Annotation-based return value types
handlers.add(new ModelAttributeMethodProcessor(false));
handlers.add(new RequestResponseBodyMethodProcessor(
getMessageConverters(), this.contentNegotiationManager, this.responseBodyInterceptors));
getMessageConverters(), this.contentNegotiationManager, this.responseBodyAdvice));

// Multi-purpose return value types
handlers.add(new ViewNameMethodReturnValueHandler());
Expand Down
Expand Up @@ -73,8 +73,8 @@ public RequestResponseBodyMethodProcessor(List<HttpMessageConverter<?>> messageC
}

public RequestResponseBodyMethodProcessor(List<HttpMessageConverter<?>> messageConverters,
ContentNegotiationManager contentNegotiationManager, List<Object> responseBodyInterceptors) {
super(messageConverters, contentNegotiationManager, responseBodyInterceptors);
ContentNegotiationManager contentNegotiationManager, List<Object> responseBodyAdvice) {
super(messageConverters, contentNegotiationManager, responseBodyAdvice);
}


Expand Down

0 comments on commit c9d0ebd

Please sign in to comment.