Browse Source

Revised supportedMethods null handling in HttpRequestMethodNotSupportedException

Issue: SPR-15377
pull/1366/head
Juergen Hoeller 9 years ago
parent
commit
5ea4abdb85
  1. 28
      spring-web/src/main/java/org/springframework/web/HttpRequestMethodNotSupportedException.java
  2. 2
      spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ResponseEntityExceptionHandler.java
  3. 3
      spring-webmvc/src/main/java/org/springframework/web/servlet/support/WebContentGenerator.java

28
spring-web/src/main/java/org/springframework/web/HttpRequestMethodNotSupportedException.java

@ -1,5 +1,5 @@ @@ -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; @@ -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 { @@ -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<String> 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 { @@ -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<HttpMethod> getSupportedHttpMethods() {
if (this.supportedMethods == null) {
return null;
}
List<HttpMethod> supportedMethods = new LinkedList<>();
for (String value : this.supportedMethods) {
HttpMethod resolved = HttpMethod.resolve(value);

2
spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ResponseEntityExceptionHandler.java

@ -227,7 +227,7 @@ public abstract class ResponseEntityExceptionHandler { @@ -227,7 +227,7 @@ public abstract class ResponseEntityExceptionHandler {
pageNotFoundLogger.warn(ex.getMessage());
Set<HttpMethod> supportedMethods = ex.getSupportedHttpMethods();
if (!supportedMethods.isEmpty()) {
if (!CollectionUtils.isEmpty(supportedMethods)) {
headers.setAllow(supportedMethods);
}
return handleExceptionInternal(ex, null, headers, status, request);

3
spring-webmvc/src/main/java/org/springframework/web/servlet/support/WebContentGenerator.java

@ -368,8 +368,7 @@ public abstract class WebContentGenerator extends WebApplicationObjectSupport { @@ -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.

Loading…
Cancel
Save