/*
 * Copyright (c) 2011-2019 Contributors to the Eclipse Foundation
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License 2.0 which is available at
 * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
 * which is available at https://www.apache.org/licenses/LICENSE-2.0.
 *
 * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
 */

package io.vertx.core.http;

import io.vertx.codegen.annotations.DataObject;
import io.vertx.core.json.JsonObject;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Objects;

Represents an HTTP method.
Author:Tim Fox, Paulo Lopes
/** * Represents an HTTP method. * * @author <a href="http://tfox.org">Tim Fox</a> * @author <a href="mailto:plopes@redhat.com">Paulo Lopes</a> */
@DataObject public class HttpMethod {
The RFC 2616 OPTIONS method, this instance is interned and uniquely used.
/** * The RFC 2616 {@code OPTIONS} method, this instance is interned and uniquely used. */
public static final HttpMethod OPTIONS;
The RFC 2616 GET method, this instance is interned and uniquely used.
/** * The RFC 2616 {@code GET} method, this instance is interned and uniquely used. */
public static final HttpMethod GET;
The RFC 2616 HEAD method, this instance is interned and uniquely used.
/** * The RFC 2616 {@code HEAD} method, this instance is interned and uniquely used. */
public static final HttpMethod HEAD;
The {RFC 2616 @code POST} method, this instance is interned and uniquely used.
/** * The {RFC 2616 @code POST} method, this instance is interned and uniquely used. */
public static final HttpMethod POST;
The RFC 2616 PUT method, this instance is interned and uniquely used.
/** * The RFC 2616 {@code PUT} method, this instance is interned and uniquely used. */
public static final HttpMethod PUT;
The RFC 2616 DELETE method, this instance is interned and uniquely used.
/** * The RFC 2616 {@code DELETE} method, this instance is interned and uniquely used. */
public static final HttpMethod DELETE;
The RFC 2616 TRACE method, this instance is interned and uniquely used.
/** * The RFC 2616 {@code TRACE} method, this instance is interned and uniquely used. */
public static final HttpMethod TRACE;
The RFC 2616 CONNECT method, this instance is interned and uniquely used.
/** * The RFC 2616 {@code CONNECT} method, this instance is interned and uniquely used. */
public static final HttpMethod CONNECT;
The RFC 5789 PATCH method, this instance is interned and uniquely used.
/** * The RFC 5789 {@code PATCH} method, this instance is interned and uniquely used. */
public static final HttpMethod PATCH;
The RFC 2518/4918 PROPFIND method, this instance is interned and uniquely used.
/** * The RFC 2518/4918 {@code PROPFIND} method, this instance is interned and uniquely used. */
public static final HttpMethod PROPFIND;
The RFC 2518/4918 PROPPATCH method, this instance is interned and uniquely used.
/** * The RFC 2518/4918 {@code PROPPATCH} method, this instance is interned and uniquely used. */
public static final HttpMethod PROPPATCH;
The RFC 2518/4918 MKCOL method, this instance is interned and uniquely used.
/** * The RFC 2518/4918 {@code MKCOL} method, this instance is interned and uniquely used. */
public static final HttpMethod MKCOL;
The RFC 2518/4918 COPY method, this instance is interned and uniquely used.
/** * The RFC 2518/4918 {@code COPY} method, this instance is interned and uniquely used. */
public static final HttpMethod COPY;
The RFC 2518/4918 MOVE method, this instance is interned and uniquely used.
/** * The RFC 2518/4918 {@code MOVE} method, this instance is interned and uniquely used. */
public static final HttpMethod MOVE;
The RFC 2518/4918 LOCK method, this instance is interned and uniquely used.
/** * The RFC 2518/4918 {@code LOCK} method, this instance is interned and uniquely used. */
public static final HttpMethod LOCK;
The RFC 2518/4918 UNLOCK method, this instance is interned and uniquely used.
/** * The RFC 2518/4918 {@code UNLOCK} method, this instance is interned and uniquely used. */
public static final HttpMethod UNLOCK;
The RFC 4791 MKCALENDAR method, this instance is interned and uniquely used.
/** * The RFC 4791 {@code MKCALENDAR} method, this instance is interned and uniquely used. */
public static final HttpMethod MKCALENDAR;
The RFC 3253 VERSION_CONTROL method, this instance is interned and uniquely used.
/** * The RFC 3253 {@code VERSION_CONTROL} method, this instance is interned and uniquely used. */
public static final HttpMethod VERSION_CONTROL;
The RFC 3253 REPORT method, this instance is interned and uniquely used.
/** * The RFC 3253 {@code REPORT} method, this instance is interned and uniquely used. */
public static final HttpMethod REPORT;
The RFC 3253 CHECKOUT method, this instance is interned and uniquely used.
/** * The RFC 3253 {@code CHECKOUT} method, this instance is interned and uniquely used. */
public static final HttpMethod CHECKOUT;
The RFC 3253 CHECKIN method, this instance is interned and uniquely used.
/** * The RFC 3253 {@code CHECKIN} method, this instance is interned and uniquely used. */
public static final HttpMethod CHECKIN;
The RFC 3253 UNCHECKOUT method, this instance is interned and uniquely used.
/** * The RFC 3253 {@code UNCHECKOUT} method, this instance is interned and uniquely used. */
public static final HttpMethod UNCHECKOUT;
The RFC 3253 MKWORKSPACE method, this instance is interned and uniquely used.
/** * The RFC 3253 {@code MKWORKSPACE} method, this instance is interned and uniquely used. */
public static final HttpMethod MKWORKSPACE;
The RFC 3253 UPDATE method, this instance is interned and uniquely used.
/** * The RFC 3253 {@code UPDATE} method, this instance is interned and uniquely used. */
public static final HttpMethod UPDATE;
The RFC 3253 LABEL method, this instance is interned and uniquely used.
/** * The RFC 3253 {@code LABEL} method, this instance is interned and uniquely used. */
public static final HttpMethod LABEL;
The RFC 3253 MERGE method, this instance is interned and uniquely used.
/** * The RFC 3253 {@code MERGE} method, this instance is interned and uniquely used. */
public static final HttpMethod MERGE;
The RFC 3253 BASELINE_CONTROL method, this instance is interned and uniquely used.
/** * The RFC 3253 {@code BASELINE_CONTROL} method, this instance is interned and uniquely used. */
public static final HttpMethod BASELINE_CONTROL;
The RFC 3253 MKACTIVITY method, this instance is interned and uniquely used.
/** * The RFC 3253 {@code MKACTIVITY} method, this instance is interned and uniquely used. */
public static final HttpMethod MKACTIVITY;
The RFC 3648 ORDERPATCH method, this instance is interned and uniquely used.
/** * The RFC 3648 {@code ORDERPATCH} method, this instance is interned and uniquely used. */
public static final HttpMethod ORDERPATCH;
The RFC 3744 ACL method, this instance is interned and uniquely used.
/** * The RFC 3744 {@code ACL} method, this instance is interned and uniquely used. */
public static final HttpMethod ACL;
The RFC 5323 SEARCH method, this instance is interned and uniquely used.
/** * The RFC 5323 {@code SEARCH} method, this instance is interned and uniquely used. */
public static final HttpMethod SEARCH;
All predefined methods.
/** * All predefined methods. */
private static final List<HttpMethod> ALL; static { OPTIONS = new HttpMethod(io.netty.handler.codec.http.HttpMethod.OPTIONS); GET = new HttpMethod(io.netty.handler.codec.http.HttpMethod.GET); HEAD = new HttpMethod(io.netty.handler.codec.http.HttpMethod.HEAD); POST = new HttpMethod(io.netty.handler.codec.http.HttpMethod.POST); PUT = new HttpMethod(io.netty.handler.codec.http.HttpMethod.PUT); DELETE = new HttpMethod(io.netty.handler.codec.http.HttpMethod.DELETE); TRACE = new HttpMethod(io.netty.handler.codec.http.HttpMethod.TRACE); CONNECT = new HttpMethod(io.netty.handler.codec.http.HttpMethod.CONNECT); PATCH = new HttpMethod(io.netty.handler.codec.http.HttpMethod.PATCH); PROPFIND = new HttpMethod(io.netty.handler.codec.http.HttpMethod.valueOf("PROPFIND")); PROPPATCH = new HttpMethod(io.netty.handler.codec.http.HttpMethod.valueOf("PROPPATCH")); MKCOL = new HttpMethod(io.netty.handler.codec.http.HttpMethod.valueOf("MKCOL")); COPY = new HttpMethod(io.netty.handler.codec.http.HttpMethod.valueOf("COPY")); MOVE = new HttpMethod(io.netty.handler.codec.http.HttpMethod.valueOf("MOVE")); LOCK = new HttpMethod(io.netty.handler.codec.http.HttpMethod.valueOf("LOCK")); UNLOCK = new HttpMethod(io.netty.handler.codec.http.HttpMethod.valueOf("UNLOCK")); MKCALENDAR = new HttpMethod(io.netty.handler.codec.http.HttpMethod.valueOf("MKCALENDAR")); VERSION_CONTROL = new HttpMethod(io.netty.handler.codec.http.HttpMethod.valueOf("VERSION-CONTROL")); REPORT = new HttpMethod(io.netty.handler.codec.http.HttpMethod.valueOf("REPORT")); CHECKOUT = new HttpMethod(io.netty.handler.codec.http.HttpMethod.valueOf("CHECKOUT")); CHECKIN = new HttpMethod(io.netty.handler.codec.http.HttpMethod.valueOf("CHECKIN")); UNCHECKOUT = new HttpMethod(io.netty.handler.codec.http.HttpMethod.valueOf("UNCHECKOUT")); MKWORKSPACE = new HttpMethod(io.netty.handler.codec.http.HttpMethod.valueOf("MKWORKSPACE")); UPDATE = new HttpMethod(io.netty.handler.codec.http.HttpMethod.valueOf("UPDATE")); LABEL = new HttpMethod(io.netty.handler.codec.http.HttpMethod.valueOf("LABEL")); MERGE = new HttpMethod(io.netty.handler.codec.http.HttpMethod.valueOf("MERGE")); BASELINE_CONTROL = new HttpMethod(io.netty.handler.codec.http.HttpMethod.valueOf("BASELINE-CONTROL")); MKACTIVITY = new HttpMethod(io.netty.handler.codec.http.HttpMethod.valueOf("MKACTIVITY")); ORDERPATCH = new HttpMethod(io.netty.handler.codec.http.HttpMethod.valueOf("ORDERPATCH")); ACL = new HttpMethod(io.netty.handler.codec.http.HttpMethod.valueOf("ACL")); SEARCH = new HttpMethod(io.netty.handler.codec.http.HttpMethod.valueOf("SEARCH")); // Create list after fields have been initialized ALL = Collections.unmodifiableList(Arrays.asList( HttpMethod.OPTIONS, HttpMethod.GET, HttpMethod.HEAD, HttpMethod.POST, HttpMethod.PUT, HttpMethod.DELETE, HttpMethod.TRACE, HttpMethod.CONNECT, HttpMethod.PATCH, HttpMethod.PROPFIND, HttpMethod.PROPPATCH, HttpMethod.MKCOL, HttpMethod.COPY, HttpMethod.MOVE, HttpMethod.LOCK, HttpMethod.UNLOCK, HttpMethod.MKCALENDAR, HttpMethod.VERSION_CONTROL, HttpMethod.REPORT, HttpMethod.CHECKIN, HttpMethod.CHECKOUT, HttpMethod.UNCHECKOUT, HttpMethod.MKWORKSPACE, HttpMethod.UPDATE, HttpMethod.LABEL, HttpMethod.MERGE, HttpMethod.BASELINE_CONTROL, HttpMethod.MKACTIVITY, HttpMethod.ORDERPATCH, HttpMethod.ACL, HttpMethod.SEARCH )); }
Returns:an un-modifiable list of known HTTP methods
/** * @return an un-modifiable list of known HTTP methods */
public static List<HttpMethod> values() { return ALL; }
Lookup the HttpMethod value for the specified nettyMethod.
The predefined method constants GET, POST, PUT, HEAD, OPTIONS, DELETE, TRACE, CONNECT and PATCH are interned and will be returned when case sensitively matching their string value (i.e "GET", etc...)
Otherwise a new instance is returned.
Params:
  • method – the netty method
Returns:the HttpMethod instance for the specified netty method
/** * Lookup the {@code HttpMethod} value for the specified {@code nettyMethod}. * <br/> * The predefined method constants {@link #GET}, {@link #POST}, {@link #PUT}, {@link #HEAD}, {@link #OPTIONS}, * {@link #DELETE}, {@link #TRACE}, {@link #CONNECT} and {@link #PATCH} are interned and will be returned * when case sensitively matching their string value (i.e {@code "GET"}, etc...) * <br/> * Otherwise a new instance is returned. * * @param method the netty method * @return the {@code HttpMethod} instance for the specified netty {@code method} */
public static HttpMethod fromNetty(io.netty.handler.codec.http.HttpMethod method) { // Fast path if (method == io.netty.handler.codec.http.HttpMethod.GET) { return GET; } else if (method == io.netty.handler.codec.http.HttpMethod.POST) { return POST; } else { // Keep method small return _fromNetty(method); } } private static HttpMethod _fromNetty(io.netty.handler.codec.http.HttpMethod sMethod) { switch (sMethod.name()) { case "OPTIONS": return OPTIONS; case "HEAD": return HEAD; case "PUT": return PUT; case "DELETE": return DELETE; case "TRACE": return TRACE; case "CONNECT": return CONNECT; case "PATCH": return PATCH; case "PROPFIND": return PROPFIND; case "PROPPATCH": return PROPPATCH; case "MKCOL": return MKCOL; case "COPY": return COPY; case "MOVE": return MOVE; case "LOCK": return LOCK; case "UNLOCK": return UNLOCK; case "MKCALENDAR": return MKCALENDAR; case "VERSION-CONTROL": return VERSION_CONTROL; case "REPORT": return REPORT; case "CHECKOUT": return CHECKOUT; case "CHECKIN": return CHECKIN; case "UNCHECKOUT": return UNCHECKOUT; case "MKWORKSPACE": return MKWORKSPACE; case "UPDATE": return UPDATE; case "LABEL": return LABEL; case "MERGE": return MERGE; case "BASELINE-CONTROL": return BASELINE_CONTROL; case "MKACTIVITY": return MKACTIVITY; case "ORDERPATCH": return ORDERPATCH; case "ACL": return ACL; case "SEARCH": return SEARCH; default: return new HttpMethod(sMethod); } }
Lookup the HttpMethod value for the specified value.
The predefined method constants GET, POST, PUT, HEAD, OPTIONS, DELETE, TRACE, CONNECT and PATCH are interned and will be returned when case sensitively matching their string value (i.e "GET", etc...)
Otherwise a new instance is returned.
Params:
  • value – the value
Throws:
Returns:the HttpMethod instance for the specified string value
/** * Lookup the {@code HttpMethod} value for the specified {@code value}. * <br/> * The predefined method constants {@link #GET}, {@link #POST}, {@link #PUT}, {@link #HEAD}, {@link #OPTIONS}, * {@link #DELETE}, {@link #TRACE}, {@link #CONNECT} and {@link #PATCH} are interned and will be returned * when case sensitively matching their string value (i.e {@code "GET"}, etc...) * <br/> * Otherwise a new instance is returned. * * @param value the value * @return the {@code HttpMethod} instance for the specified string {@code value} * @throws IllegalArgumentException when the value is incorrect, the value is empty or contains an invalid char */
public static HttpMethod valueOf(String value) { Objects.requireNonNull(value, "value"); switch (value) { case "OPTIONS": return OPTIONS; case "GET": return GET; case "HEAD": return HEAD; case "POST": return POST; case "PUT": return PUT; case "DELETE": return DELETE; case "TRACE": return TRACE; case "CONNECT": return CONNECT; case "PATCH": return PATCH; case "PROPFIND": return PROPFIND; case "PROPPATCH": return PROPPATCH; case "MKCOL": return MKCOL; case "COPY": return COPY; case "MOVE": return MOVE; case "LOCK": return LOCK; case "UNLOCK": return UNLOCK; case "MKCALENDAR": return MKCALENDAR; case "VERSION-CONTROL": return VERSION_CONTROL; case "REPORT": return REPORT; case "CHECKOUT": return CHECKOUT; case "CHECKIN": return CHECKIN; case "UNCHECKOUT": return UNCHECKOUT; case "MKWORKSPACE": return MKWORKSPACE; case "UPDATE": return UPDATE; case "LABEL": return LABEL; case "MERGE": return MERGE; case "BASELINE-CONTROL": return BASELINE_CONTROL; case "MKACTIVITY": return MKACTIVITY; case "ORDERPATCH": return ORDERPATCH; case "ACL": return ACL; case "SEARCH": return SEARCH; default: return new HttpMethod(io.netty.handler.codec.http.HttpMethod.valueOf(value)); } } private final io.netty.handler.codec.http.HttpMethod nettyMethod; public JsonObject toJson() { throw new UnsupportedOperationException(); } public HttpMethod(String name) { Objects.requireNonNull(name, "HTTP method name"); this.nettyMethod = io.netty.handler.codec.http.HttpMethod.valueOf(name); } private HttpMethod(io.netty.handler.codec.http.HttpMethod nettyMethod) { Objects.requireNonNull(nettyMethod, "HTTP method"); this.nettyMethod = nettyMethod; }
Returns:the method name
/** * @return the method name */
public String name() { return nettyMethod.name(); }
Returns:the same value than name()
/** * @return the same value than {@link #name()} */
public String toString() { return nettyMethod.toString(); } @Override public int hashCode() { return nettyMethod.hashCode(); } @Override public boolean equals(Object obj) { if (obj == this) { return true; } if (obj instanceof HttpMethod) { HttpMethod that = (HttpMethod) obj; return Objects.equals(name(), that.name()); } return false; }
Returns:the wrapped Netty method instance
/** * @return the wrapped Netty method instance */
public io.netty.handler.codec.http.HttpMethod toNetty() { return nettyMethod; } }