@PreMatching
@Priority(value=3050)
public final class HttpMethodOverrideFilter
extends java.lang.Object
implements javax.ws.rs.container.ContainerRequestFilter
This filter may be used to replace a POST request with a PUT, DELETE or GET request.
Replacement will occur if the request method is POST and there exists either
a request header "X-HTTP-Method-Override", or
a query parameter "_method" with a non-empty value. That value
will be the HTTP method that replaces the POST method. In addition to that,
when replacing the POST method with GET, the filter will convert the form parameters
to query parameters. If the filter is configured to look for both the X-HTTP-Method-Override
header as well as the _method query parameter (the default setting), both are present in the
request and they differ, the filter returns Response.Status.BAD_REQUEST
response.
The filter behavior can be configured using ServerProperties.HTTP_METHOD_OVERRIDE
property.
Modifier and Type | Class and Description |
---|---|
static class |
HttpMethodOverrideFilter.Source
Enumeration representing possible sources of information about the method overriding
the filter should look for.
|
Modifier and Type | Field and Description |
---|---|
(package private) int |
config
Configuration flags.
|
Constructor and Description |
---|
HttpMethodOverrideFilter(javax.ws.rs.core.Configuration rc)
Create a filter that reads the configuration (
ServerProperties.HTTP_METHOD_OVERRIDE )
from the provided ResourceConfig instance. |
HttpMethodOverrideFilter(HttpMethodOverrideFilter.Source... sources)
Initializes this filter setting the sources of information the filter should look for.
|
Modifier and Type | Method and Description |
---|---|
static void |
enableFor(ResourceConfig rc,
HttpMethodOverrideFilter.Source... sources)
Registers this filter into the passed
ResourceConfig instance and
configures it. |
void |
filter(javax.ws.rs.container.ContainerRequestContext request) |
private java.lang.String |
getParamValue(HttpMethodOverrideFilter.Source source,
javax.ws.rs.core.MultivaluedMap<java.lang.String,java.lang.String> paramsMap,
java.lang.String paramName)
Returns parameter value in a normalized form (uppercase, trimmed and
null if empty string)
considering the config flags. |
private static HttpMethodOverrideFilter.Source[] |
parseConfig(java.lang.Object config)
Converts configuration property value to an array of
HttpMethodOverrideFilter.Source literals. |
public HttpMethodOverrideFilter(@Context javax.ws.rs.core.Configuration rc)
ServerProperties.HTTP_METHOD_OVERRIDE
)
from the provided ResourceConfig
instance.
This constructor will be called by the Jersey runtime when the filter class is returned from
Application.getClasses()
. The ResourceConfig
instance will get auto-injected.rc
- ResourceConfig instance that holds the configuration for the filter.public HttpMethodOverrideFilter(HttpMethodOverrideFilter.Source... sources)
sources
- Sources of method override information. If empty, both
HttpMethodOverrideFilter.Source.HEADER
and
HttpMethodOverrideFilter.Source.QUERY
will
be added to the config by default.public static void enableFor(ResourceConfig rc, HttpMethodOverrideFilter.Source... sources)
ResourceConfig
instance and
configures it.rc
- Resource config.sources
- Sources of method override information. If empty, both
HttpMethodOverrideFilter.Source.HEADER
and
HttpMethodOverrideFilter.Source.QUERY
will
be added to the config by default.private static HttpMethodOverrideFilter.Source[] parseConfig(java.lang.Object config)
HttpMethodOverrideFilter.Source
literals.config
- configuration property
valueSource
objects.private java.lang.String getParamValue(HttpMethodOverrideFilter.Source source, javax.ws.rs.core.MultivaluedMap<java.lang.String,java.lang.String> paramsMap, java.lang.String paramName)
null
if empty string)
considering the config flags.source
- Config flag to look for (if set in the config, this method returns the param value,
if not set, this method returns null
).paramsMap
- Map to retrieve the parameter from.paramName
- Name of the parameter to retrieve.null
.public void filter(javax.ws.rs.container.ContainerRequestContext request)
filter
in interface javax.ws.rs.container.ContainerRequestFilter