diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestBodyAdvice.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestBodyAdvice.java index 0d810c29f5..1bb0e146b2 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestBodyAdvice.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestBodyAdvice.java @@ -16,6 +16,7 @@ package org.springframework.web.servlet.mvc.method.annotation; +import java.io.IOException; import java.lang.reflect.Type; import org.springframework.core.MethodParameter; @@ -73,7 +74,7 @@ public interface RequestBodyAdvice { * @return the input request or a new instance, never {@code null} */ HttpInputMessage beforeBodyRead(HttpInputMessage inputMessage, MethodParameter parameter, - Type targetType, Class> converterType); + Type targetType, Class> converterType) throws IOException; /** * Invoked third (and last) after the request body is converted to an Object. diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestBodyAdviceAdapter.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestBodyAdviceAdapter.java new file mode 100644 index 0000000000..ee110ee972 --- /dev/null +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestBodyAdviceAdapter.java @@ -0,0 +1,70 @@ +/* + * Copyright 2002-2015 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.web.servlet.mvc.method.annotation; + +import java.io.IOException; +import java.lang.reflect.Type; + +import org.springframework.core.MethodParameter; +import org.springframework.http.HttpInputMessage; +import org.springframework.http.converter.HttpMessageConverter; + +/** + * A convenient starting point for implementing + * {@link org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice + * ResponseBodyAdvice} with default method implementations. + * + *

Sub-classes are required to implement {@link #supports} to return true + * depending on when the advice applies. + * + * @author Rossen Stoyanchev + * @since 4.2 + */ +public abstract class RequestBodyAdviceAdapter implements RequestBodyAdvice { + + /** + * The default implementation returns the body that was passed in. + */ + @Override + public Object handleEmptyBody(Object body, HttpInputMessage inputMessage, + MethodParameter parameter, Type targetType, + Class> converterType) { + + return body; + } + + /** + * The default implementation returns the InputMessage that was passed in. + */ + @Override + public HttpInputMessage beforeBodyRead(HttpInputMessage inputMessage, MethodParameter parameter, + Type targetType, Class> converterType) + throws IOException { + + return inputMessage; + } + + /** + * The default implementation returns the body that was passed in. + */ + @Override + public Object afterBodyRead(Object body, HttpInputMessage inputMessage, MethodParameter parameter, + Type targetType, Class> converterType) { + + return body; + } + +}