From e6fd7abdb9bca60d219525ff7de95f985f7dd970 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 ea99768fd7..449d1c9458 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. @@ -38,6 +38,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 { @@ -49,7 +50,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(@Nullable List requestResponseBodyAdvice) { if (requestResponseBodyAdvice != null) { @@ -60,7 +61,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); } }