From 47e88aaf4381b4d6463eadd4e3832c8a6f9c26a7 Mon Sep 17 00:00:00 2001 From: Sam Brannen Date: Tue, 26 Mar 2019 13:46:29 +0100 Subject: [PATCH] Allow ResponseBodyAdvice to implement RequestBodyAdvice Prior to this commit, if a @ControllerAdvice bean implemented both RequestBodyAdvice and ResponseBodyAdvice, it was only supported as RequestBodyAdvice, meaning it was never invoked as ResponseBodyAdvice. This commit revises RequestResponseBodyAdviceChain to ensure that a single bean implementing both types of body advice is in fact handled as both types of advice. See gh-22638 --- .../method/annotation/RequestResponseBodyAdviceChain.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestResponseBodyAdviceChain.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestResponseBodyAdviceChain.java index faab38845a0..f95bc44e2ca 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestResponseBodyAdviceChain.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestResponseBodyAdviceChain.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2017 the original author or authors. + * Copyright 2002-2019 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. @@ -37,6 +37,7 @@ import org.springframework.web.method.ControllerAdviceBean; * {@link org.springframework.web.method.ControllerAdviceBean ControllerAdviceBean}. * * @author Rossen Stoyanchev + * @author Sam Brannen * @since 4.2 */ class RequestResponseBodyAdviceChain implements RequestBodyAdvice, ResponseBodyAdvice { @@ -48,7 +49,7 @@ class RequestResponseBodyAdviceChain implements RequestBodyAdvice, ResponseBodyA /** * Create an instance from a list of objects that are either of type - * {@code ControllerAdviceBean} or {@code RequestBodyAdvice}. + * {@code RequestBodyAdvice} or {@code ResponseBodyAdvice}. */ public RequestResponseBodyAdviceChain(List requestResponseBodyAdvice) { initAdvice(requestResponseBodyAdvice); @@ -64,7 +65,7 @@ class RequestResponseBodyAdviceChain implements RequestBodyAdvice, ResponseBodyA if (RequestBodyAdvice.class.isAssignableFrom(beanType)) { this.requestBodyAdvice.add(advice); } - else if (ResponseBodyAdvice.class.isAssignableFrom(beanType)) { + if (ResponseBodyAdvice.class.isAssignableFrom(beanType)) { this.responseBodyAdvice.add(advice); } }