Skip to content

Commit 5fcf662

Browse files
committed
Test fix in gh-22638
1 parent 39d6f22 commit 5fcf662

File tree

1 file changed

+43
-2
lines changed

1 file changed

+43
-2
lines changed

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

Lines changed: 43 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2002-2018 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,15 +30,18 @@
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;
3942
import org.springframework.http.server.ServerHttpResponse;
4043
import org.springframework.http.server.ServletServerHttpResponse;
44+
import org.springframework.lang.Nullable;
4145
import org.springframework.mock.web.test.MockHttpServletRequest;
4246
import org.springframework.mock.web.test.MockHttpServletResponse;
4347
import org.springframework.ui.Model;
@@ -60,6 +64,7 @@
6064
* Unit tests for {@link RequestMappingHandlerAdapter}.
6165
*
6266
* @author Rossen Stoyanchev
67+
* @author Sam Brannen
6368
* @see ServletAnnotationControllerHandlerMethodTests
6469
* @see HandlerMethodAnnotationDetectionTests
6570
* @see RequestMappingHandlerAdapterIntegrationTests
@@ -380,8 +385,15 @@ public void addAttributes(Model model) {
380385
}
381386
}
382387

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

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

401442
@ControllerAdvice

0 commit comments

Comments
 (0)