diff --git a/spring-web/src/main/java/org/springframework/web/HttpRequestMethodNotSupportedException.java b/spring-web/src/main/java/org/springframework/web/HttpRequestMethodNotSupportedException.java index 0a2644660b5..bc13568dc71 100644 --- a/spring-web/src/main/java/org/springframework/web/HttpRequestMethodNotSupportedException.java +++ b/spring-web/src/main/java/org/springframework/web/HttpRequestMethodNotSupportedException.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2016 the original author or authors. + * Copyright 2002-2017 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. @@ -24,6 +24,7 @@ import java.util.Set; import javax.servlet.ServletException; import org.springframework.http.HttpMethod; +import org.springframework.util.StringUtils; /** * Exception thrown when a request handler does not support a @@ -51,28 +52,28 @@ public class HttpRequestMethodNotSupportedException extends ServletException { /** * Create a new HttpRequestMethodNotSupportedException. * @param method the unsupported HTTP request method - * @param supportedMethods the actually supported HTTP methods + * @param msg the detail message */ - public HttpRequestMethodNotSupportedException(String method, String[] supportedMethods) { - this(method, supportedMethods, "Request method '" + method + "' not supported"); + public HttpRequestMethodNotSupportedException(String method, String msg) { + this(method, null, msg); } /** * Create a new HttpRequestMethodNotSupportedException. * @param method the unsupported HTTP request method - * @param supportedMethods the actually supported HTTP methods + * @param supportedMethods the actually supported HTTP methods (may be {@code null}) */ public HttpRequestMethodNotSupportedException(String method, Collection supportedMethods) { - this(method, supportedMethods.toArray(new String[supportedMethods.size()])); + this(method, StringUtils.toStringArray(supportedMethods)); } /** * Create a new HttpRequestMethodNotSupportedException. * @param method the unsupported HTTP request method - * @param msg the detail message + * @param supportedMethods the actually supported HTTP methods (may be {@code null}) */ - public HttpRequestMethodNotSupportedException(String method, String msg) { - this(method, null, msg); + public HttpRequestMethodNotSupportedException(String method, String[] supportedMethods) { + this(method, supportedMethods, "Request method '" + method + "' not supported"); } /** @@ -96,16 +97,21 @@ public class HttpRequestMethodNotSupportedException extends ServletException { } /** - * Return the actually supported HTTP methods, if known. + * Return the actually supported HTTP methods, or {@code null} if not known. */ public String[] getSupportedMethods() { return this.supportedMethods; } /** - * Return the actually supported HTTP methods, if known, as {@link HttpMethod} instances. + * Return the actually supported HTTP methods as {@link HttpMethod} instances, + * or {@code null} if not known. + * @since 3.2 */ public Set getSupportedHttpMethods() { + if (this.supportedMethods == null) { + return null; + } List supportedMethods = new LinkedList<>(); for (String value : this.supportedMethods) { HttpMethod resolved = HttpMethod.resolve(value); diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ResponseEntityExceptionHandler.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ResponseEntityExceptionHandler.java index c5eae7dadc2..d5718a3ee49 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ResponseEntityExceptionHandler.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ResponseEntityExceptionHandler.java @@ -227,7 +227,7 @@ public abstract class ResponseEntityExceptionHandler { pageNotFoundLogger.warn(ex.getMessage()); Set supportedMethods = ex.getSupportedHttpMethods(); - if (!supportedMethods.isEmpty()) { + if (!CollectionUtils.isEmpty(supportedMethods)) { headers.setAllow(supportedMethods); } return handleExceptionInternal(ex, null, headers, status, request); diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/support/WebContentGenerator.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/support/WebContentGenerator.java index c8905b21f4c..fd6615a762a 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/support/WebContentGenerator.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/support/WebContentGenerator.java @@ -368,8 +368,7 @@ public abstract class WebContentGenerator extends WebApplicationObjectSupport { // Check whether we should support the request method. String method = request.getMethod(); if (this.supportedMethods != null && !this.supportedMethods.contains(method)) { - throw new HttpRequestMethodNotSupportedException( - method, StringUtils.toStringArray(this.supportedMethods)); + throw new HttpRequestMethodNotSupportedException(method, this.supportedMethods); } // Check whether a session is required.