Skip to content

Commit d397d74

Browse files
committed
Test fix in gh-22638
1 parent b369356 commit d397d74

File tree

1 file changed

+42
-2
lines changed

1 file changed

+42
-2
lines changed

spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/RequestMappingHandlerAdapterTests.java

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2002-2015 the original author or authors.
2+
* Copyright 2002-2019 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -17,6 +17,7 @@
1717
package org.springframework.web.servlet.mvc.method.annotation;
1818

1919
import java.lang.reflect.Method;
20+
import java.lang.reflect.Type;
2021
import java.util.ArrayList;
2122
import java.util.Arrays;
2223
import java.util.Collections;
@@ -29,10 +30,12 @@
2930
import org.junit.Test;
3031

3132
import org.springframework.core.MethodParameter;
33+
import org.springframework.http.HttpInputMessage;
3234
import org.springframework.http.HttpStatus;
3335
import org.springframework.http.MediaType;
3436
import org.springframework.http.ResponseEntity;
3537
import org.springframework.http.converter.HttpMessageConverter;
38+
import org.springframework.http.converter.StringHttpMessageConverter;
3639
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
3740
import org.springframework.http.converter.json.MappingJacksonValue;
3841
import org.springframework.http.server.ServerHttpRequest;
@@ -61,6 +64,7 @@
6164
* Unit tests for {@link RequestMappingHandlerAdapter}.
6265
*
6366
* @author Rossen Stoyanchev
67+
* @author Sam Brannen
6468
* @see ServletAnnotationControllerHandlerMethodTests
6569
* @see HandlerMethodAnnotationDetectionTests
6670
* @see RequestMappingHandlerAdapterIntegrationTests
@@ -382,8 +386,15 @@ public void addAttributes(Model model) {
382386
}
383387
}
384388

389+
/**
390+
* This class additionally implements {@link RequestBodyAdvice} solely for the purpose
391+
* of verifying that controller advice implementing both {@link ResponseBodyAdvice}
392+
* and {@link RequestBodyAdvice} does not get registered twice.
393+
*
394+
* @see <a href="https://github.com/spring-projects/spring-framework/pull/22638">gh-22638</a>
395+
*/
385396
@ControllerAdvice
386-
private static class ResponseCodeSuppressingAdvice extends AbstractMappingJacksonResponseBodyAdvice {
397+
private static class ResponseCodeSuppressingAdvice extends AbstractMappingJacksonResponseBodyAdvice implements RequestBodyAdvice {
387398

388399
@SuppressWarnings("unchecked")
389400
@Override
@@ -398,6 +409,35 @@ protected void beforeBodyWriteInternal(MappingJacksonValue bodyContainer, MediaT
398409
map.put("message", bodyContainer.getValue());
399410
bodyContainer.setValue(map);
400411
}
412+
413+
@Override
414+
public boolean supports(MethodParameter methodParameter, Type targetType,
415+
Class<? extends HttpMessageConverter<?>> converterType) {
416+
417+
return StringHttpMessageConverter.class.equals(converterType);
418+
}
419+
420+
@Override
421+
public HttpInputMessage beforeBodyRead(HttpInputMessage inputMessage, MethodParameter parameter,
422+
Type targetType, Class<? extends HttpMessageConverter<?>> converterType) {
423+
424+
return inputMessage;
425+
}
426+
427+
@Override
428+
public Object afterBodyRead(Object body, HttpInputMessage inputMessage, MethodParameter parameter,
429+
Type targetType, Class<? extends HttpMessageConverter<?>> converterType) {
430+
431+
return body;
432+
}
433+
434+
@Override
435+
public Object handleEmptyBody(Object body, HttpInputMessage inputMessage, MethodParameter parameter,
436+
Type targetType, Class<? extends HttpMessageConverter<?>> converterType) {
437+
438+
return "default value for empty body";
439+
}
440+
401441
}
402442

403443
@ControllerAdvice

0 commit comments

Comments
 (0)