From 20a6d36e13f027d6b68177ea73188b9c2ee3e72f Mon Sep 17 00:00:00 2001 From: Oliver Drotbohm Date: Wed, 5 Jun 2019 23:38:35 +0200 Subject: [PATCH] DATAREST-1387 - DelegatingHandlerMapping now handles HttpMediaTypeNotSupportedException. --- .../rest/webmvc/support/DelegatingHandlerMapping.java | 11 +++++++---- .../support/DelegatingHandlerMappingUnitTests.java | 4 +++- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/support/DelegatingHandlerMapping.java b/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/support/DelegatingHandlerMapping.java index db4a1855c..e2cc4b4d3 100644 --- a/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/support/DelegatingHandlerMapping.java +++ b/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/support/DelegatingHandlerMapping.java @@ -22,6 +22,7 @@ import javax.servlet.http.HttpServletRequest; import org.springframework.core.Ordered; import org.springframework.util.Assert; import org.springframework.web.HttpMediaTypeNotAcceptableException; +import org.springframework.web.HttpMediaTypeNotSupportedException; import org.springframework.web.HttpRequestMethodNotSupportedException; import org.springframework.web.bind.UnsatisfiedServletRequestParameterException; import org.springframework.web.servlet.HandlerExecutionChain; @@ -30,7 +31,7 @@ import org.springframework.web.servlet.HandlerMapping; /** * A {@link HandlerMapping} that considers a {@link List} of delegates. It will keep on traversing the delegates in case * an {@link HttpMediaTypeNotAcceptableException} is thrown while trying to lookup the handler on a particular delegate. - * + * * @author Oliver Gierke * @soundtrack Benny Greb - Stabila (Moving Parts) */ @@ -40,7 +41,7 @@ public class DelegatingHandlerMapping implements HandlerMapping, Ordered { /** * Creates a new {@link DelegatingHandlerMapping} for the given delegates. - * + * * @param delegates must not be {@literal null}. */ public DelegatingHandlerMapping(List delegates) { @@ -50,7 +51,7 @@ public class DelegatingHandlerMapping implements HandlerMapping, Ordered { this.delegates = delegates; } - /* + /* * (non-Javadoc) * @see org.springframework.core.Ordered#getOrder() */ @@ -59,7 +60,7 @@ public class DelegatingHandlerMapping implements HandlerMapping, Ordered { return Ordered.LOWEST_PRECEDENCE - 100; } - /* + /* * (non-Javadoc) * @see org.springframework.web.servlet.HandlerMapping#getHandler(javax.servlet.http.HttpServletRequest) */ @@ -78,6 +79,8 @@ public class DelegatingHandlerMapping implements HandlerMapping, Ordered { return result; } + } catch (HttpMediaTypeNotSupportedException o_O) { + exception = o_O; } catch (HttpMediaTypeNotAcceptableException o_O) { exception = o_O; } catch (HttpRequestMethodNotSupportedException o_O) { diff --git a/spring-data-rest-webmvc/src/test/java/org/springframework/data/rest/webmvc/support/DelegatingHandlerMappingUnitTests.java b/spring-data-rest-webmvc/src/test/java/org/springframework/data/rest/webmvc/support/DelegatingHandlerMappingUnitTests.java index b6b387af1..22ef77ca3 100644 --- a/spring-data-rest-webmvc/src/test/java/org/springframework/data/rest/webmvc/support/DelegatingHandlerMappingUnitTests.java +++ b/spring-data-rest-webmvc/src/test/java/org/springframework/data/rest/webmvc/support/DelegatingHandlerMappingUnitTests.java @@ -28,6 +28,7 @@ import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import org.springframework.web.HttpMediaTypeNotAcceptableException; +import org.springframework.web.HttpMediaTypeNotSupportedException; import org.springframework.web.HttpRequestMethodNotSupportedException; import org.springframework.web.bind.UnsatisfiedServletRequestParameterException; import org.springframework.web.servlet.HandlerMapping; @@ -44,7 +45,7 @@ public class DelegatingHandlerMappingUnitTests { @Mock HandlerMapping first, second; @Mock HttpServletRequest request; - @Test // DATAREST-490, DATAREST-522 + @Test // DATAREST-490, DATAREST-522, DATAREST-1387 public void consultsAllHandlerMappingsAndThrowsExceptionEventually() throws Exception { DelegatingHandlerMapping mapping = new DelegatingHandlerMapping(Arrays.asList(first, second)); @@ -52,6 +53,7 @@ public class DelegatingHandlerMappingUnitTests { assertHandlerTriedButExceptionThrown(mapping, HttpMediaTypeNotAcceptableException.class); assertHandlerTriedButExceptionThrown(mapping, HttpRequestMethodNotSupportedException.class); assertHandlerTriedButExceptionThrown(mapping, UnsatisfiedServletRequestParameterException.class); + assertHandlerTriedButExceptionThrown(mapping, HttpMediaTypeNotSupportedException.class); // DATAREST-1387 } @SuppressWarnings("unchecked")