Skip to content

Commit 6870b9c

Browse files
committed
Test fix in gh-22638
1 parent 93de5f4 commit 6870b9c

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
@@ -342,8 +347,15 @@ public void addAttributes(Model model) {
342347
}
343348
}
344349

350+
/**
351+
* This class additionally implements {@link RequestBodyAdvice} solely for the purpose
352+
* of verifying that controller advice implementing both {@link ResponseBodyAdvice}
353+
* and {@link RequestBodyAdvice} does not get registered twice.
354+
*
355+
* @see <a href="https://github.com/spring-projects/spring-framework/pull/22638">gh-22638</a>
356+
*/
345357
@ControllerAdvice
346-
private static class ResponseCodeSuppressingAdvice extends AbstractMappingJacksonResponseBodyAdvice {
358+
private static class ResponseCodeSuppressingAdvice extends AbstractMappingJacksonResponseBodyAdvice implements RequestBodyAdvice {
347359

348360
@Override
349361
protected void beforeBodyWriteInternal(MappingJacksonValue bodyContainer, MediaType contentType,
@@ -357,6 +369,35 @@ protected void beforeBodyWriteInternal(MappingJacksonValue bodyContainer, MediaT
357369
map.put("message", bodyContainer.getValue());
358370
bodyContainer.setValue(map);
359371
}
372+
373+
@Override
374+
public boolean supports(MethodParameter methodParameter, Type targetType,
375+
Class<? extends HttpMessageConverter<?>> converterType) {
376+
377+
return StringHttpMessageConverter.class.equals(converterType);
378+
}
379+
380+
@Override
381+
public HttpInputMessage beforeBodyRead(HttpInputMessage inputMessage, MethodParameter parameter,
382+
Type targetType, Class<? extends HttpMessageConverter<?>> converterType) {
383+
384+
return inputMessage;
385+
}
386+
387+
@Override
388+
public Object afterBodyRead(Object body, HttpInputMessage inputMessage, MethodParameter parameter,
389+
Type targetType, Class<? extends HttpMessageConverter<?>> converterType) {
390+
391+
return body;
392+
}
393+
394+
@Override
395+
public Object handleEmptyBody(@Nullable Object body, HttpInputMessage inputMessage, MethodParameter parameter,
396+
Type targetType, Class<? extends HttpMessageConverter<?>> converterType) {
397+
398+
return "default value for empty body";
399+
}
400+
360401
}
361402

362403
}

0 commit comments

Comments
 (0)