Revised supportedMethods null handling in HttpRequestMethodNotSupportedException
Issue: SPR-15377
(cherry picked from commit 5ea4abd)
This commit is contained in:
parent
2233ec04ff
commit
d0177b0f55
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2002-2015 the original author or authors.
|
* Copyright 2002-2017 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with 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 javax.servlet.ServletException;
|
||||||
|
|
||||||
import org.springframework.http.HttpMethod;
|
import org.springframework.http.HttpMethod;
|
||||||
|
import org.springframework.util.StringUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Exception thrown when a request handler does not support a
|
* Exception thrown when a request handler does not support a
|
||||||
|
|
@ -48,24 +49,6 @@ public class HttpRequestMethodNotSupportedException extends ServletException {
|
||||||
this(method, (String[]) null);
|
this(method, (String[]) null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a new HttpRequestMethodNotSupportedException.
|
|
||||||
* @param method the unsupported HTTP request method
|
|
||||||
* @param supportedMethods the actually supported HTTP methods
|
|
||||||
*/
|
|
||||||
public HttpRequestMethodNotSupportedException(String method, String[] supportedMethods) {
|
|
||||||
this(method, supportedMethods, "Request method '" + method + "' not supported");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a new HttpRequestMethodNotSupportedException.
|
|
||||||
* @param method the unsupported HTTP request method
|
|
||||||
* @param supportedMethods the actually supported HTTP methods
|
|
||||||
*/
|
|
||||||
public HttpRequestMethodNotSupportedException(String method, Collection<String> supportedMethods) {
|
|
||||||
this(method, supportedMethods.toArray(new String[supportedMethods.size()]));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a new HttpRequestMethodNotSupportedException.
|
* Create a new HttpRequestMethodNotSupportedException.
|
||||||
* @param method the unsupported HTTP request method
|
* @param method the unsupported HTTP request method
|
||||||
|
|
@ -75,6 +58,24 @@ public class HttpRequestMethodNotSupportedException extends ServletException {
|
||||||
this(method, null, msg);
|
this(method, null, msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new HttpRequestMethodNotSupportedException.
|
||||||
|
* @param method the unsupported HTTP request method
|
||||||
|
* @param supportedMethods the actually supported HTTP methods (may be {@code null})
|
||||||
|
*/
|
||||||
|
public HttpRequestMethodNotSupportedException(String method, Collection<String> supportedMethods) {
|
||||||
|
this(method, StringUtils.toStringArray(supportedMethods));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new HttpRequestMethodNotSupportedException.
|
||||||
|
* @param method the unsupported HTTP request method
|
||||||
|
* @param supportedMethods the actually supported HTTP methods (may be {@code null})
|
||||||
|
*/
|
||||||
|
public HttpRequestMethodNotSupportedException(String method, String[] supportedMethods) {
|
||||||
|
this(method, supportedMethods, "Request method '" + method + "' not supported");
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a new HttpRequestMethodNotSupportedException.
|
* Create a new HttpRequestMethodNotSupportedException.
|
||||||
* @param method the unsupported HTTP request method
|
* @param method the unsupported HTTP request method
|
||||||
|
|
@ -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() {
|
public String[] getSupportedMethods() {
|
||||||
return this.supportedMethods;
|
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() {
|
public Set<HttpMethod> getSupportedHttpMethods() {
|
||||||
|
if (this.supportedMethods == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
List<HttpMethod> supportedMethods = new LinkedList<HttpMethod>();
|
List<HttpMethod> supportedMethods = new LinkedList<HttpMethod>();
|
||||||
for (String value : this.supportedMethods) {
|
for (String value : this.supportedMethods) {
|
||||||
HttpMethod resolved = HttpMethod.resolve(value);
|
HttpMethod resolved = HttpMethod.resolve(value);
|
||||||
|
|
|
||||||
|
|
@ -252,7 +252,7 @@ public abstract class ResponseEntityExceptionHandler {
|
||||||
pageNotFoundLogger.warn(ex.getMessage());
|
pageNotFoundLogger.warn(ex.getMessage());
|
||||||
|
|
||||||
Set<HttpMethod> supportedMethods = ex.getSupportedHttpMethods();
|
Set<HttpMethod> supportedMethods = ex.getSupportedHttpMethods();
|
||||||
if (!supportedMethods.isEmpty()) {
|
if (!CollectionUtils.isEmpty(supportedMethods)) {
|
||||||
headers.setAllow(supportedMethods);
|
headers.setAllow(supportedMethods);
|
||||||
}
|
}
|
||||||
return handleExceptionInternal(ex, null, headers, status, request);
|
return handleExceptionInternal(ex, null, headers, status, request);
|
||||||
|
|
|
||||||
|
|
@ -375,8 +375,7 @@ public abstract class WebContentGenerator extends WebApplicationObjectSupport {
|
||||||
// Check whether we should support the request method.
|
// Check whether we should support the request method.
|
||||||
String method = request.getMethod();
|
String method = request.getMethod();
|
||||||
if (this.supportedMethods != null && !this.supportedMethods.contains(method)) {
|
if (this.supportedMethods != null && !this.supportedMethods.contains(method)) {
|
||||||
throw new HttpRequestMethodNotSupportedException(
|
throw new HttpRequestMethodNotSupportedException(method, this.supportedMethods);
|
||||||
method, StringUtils.toStringArray(this.supportedMethods));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check whether a session is required.
|
// Check whether a session is required.
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue