Add HttpStatusClass
Related: #3157 Motivation: It should be convenient to have an easy way to classify an HttpResponseStatus based on the first digit of the HTTP status code, as defined in the RFC 2616: - Information 1xx - Success 2xx - Redirection 3xx - Client Error 4xx - Server Error 5xx Modification: - Add HttpStatusClass - Add HttpResponseStatus.codeClass() that returns the class of the HTTP status code Result: It's easier to determine the class of an HTTP status
This commit is contained in:
parent
8ba9e5bede
commit
948eafdce2
@ -435,25 +435,7 @@ public class HttpResponseStatus implements Comparable<HttpResponseStatus> {
|
|||||||
return NETWORK_AUTHENTICATION_REQUIRED;
|
return NETWORK_AUTHENTICATION_REQUIRED;
|
||||||
}
|
}
|
||||||
|
|
||||||
final String reasonPhrase;
|
return new HttpResponseStatus(code);
|
||||||
|
|
||||||
if (code < 100) {
|
|
||||||
reasonPhrase = "Unknown Status";
|
|
||||||
} else if (code < 200) {
|
|
||||||
reasonPhrase = "Informational";
|
|
||||||
} else if (code < 300) {
|
|
||||||
reasonPhrase = "Successful";
|
|
||||||
} else if (code < 400) {
|
|
||||||
reasonPhrase = "Redirection";
|
|
||||||
} else if (code < 500) {
|
|
||||||
reasonPhrase = "Client Error";
|
|
||||||
} else if (code < 600) {
|
|
||||||
reasonPhrase = "Server Error";
|
|
||||||
} else {
|
|
||||||
reasonPhrase = "Unknown Status";
|
|
||||||
}
|
|
||||||
|
|
||||||
return new HttpResponseStatus(code, reasonPhrase + " (" + code + ')');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -488,13 +470,20 @@ public class HttpResponseStatus implements Comparable<HttpResponseStatus> {
|
|||||||
|
|
||||||
private final int code;
|
private final int code;
|
||||||
private final AsciiString codeAsText;
|
private final AsciiString codeAsText;
|
||||||
|
private HttpStatusClass codeClass;
|
||||||
|
|
||||||
private final String reasonPhrase;
|
private final String reasonPhrase;
|
||||||
private final byte[] bytes;
|
private final byte[] bytes;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a new instance with the specified {@code code} and its
|
* Creates a new instance with the specified {@code code} and the auto-generated default reason phrase.
|
||||||
* {@code reasonPhrase}.
|
*/
|
||||||
|
private HttpResponseStatus(int code) {
|
||||||
|
this(code, HttpStatusClass.valueOf(code).defaultReasonPhrase() + " (" + code + ')', false);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new instance with the specified {@code code} and its {@code reasonPhrase}.
|
||||||
*/
|
*/
|
||||||
public HttpResponseStatus(int code, String reasonPhrase) {
|
public HttpResponseStatus(int code, String reasonPhrase) {
|
||||||
this(code, reasonPhrase, false);
|
this(code, reasonPhrase, false);
|
||||||
@ -552,6 +541,17 @@ public class HttpResponseStatus implements Comparable<HttpResponseStatus> {
|
|||||||
return reasonPhrase;
|
return reasonPhrase;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the class of this {@link HttpResponseStatus}
|
||||||
|
*/
|
||||||
|
public HttpStatusClass codeClass() {
|
||||||
|
HttpStatusClass type = this.codeClass;
|
||||||
|
if (type == null) {
|
||||||
|
this.codeClass = type = HttpStatusClass.valueOf(code);
|
||||||
|
}
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int hashCode() {
|
public int hashCode() {
|
||||||
return code();
|
return code();
|
||||||
|
@ -0,0 +1,100 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2014 The Netty Project
|
||||||
|
*
|
||||||
|
* The Netty Project licenses this file to you under the Apache License,
|
||||||
|
* version 2.0 (the "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
* License for the specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package io.netty.handler.codec.http;
|
||||||
|
|
||||||
|
import io.netty.handler.codec.AsciiString;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The class of HTTP status.
|
||||||
|
*/
|
||||||
|
public enum HttpStatusClass {
|
||||||
|
/**
|
||||||
|
* The informational class (1xx)
|
||||||
|
*/
|
||||||
|
INFORMATIONAL(100, 200, "Informational"),
|
||||||
|
/**
|
||||||
|
* The success class (2xx)
|
||||||
|
*/
|
||||||
|
SUCCESS(200, 300, "Success"),
|
||||||
|
/**
|
||||||
|
* The redirection class (3xx)
|
||||||
|
*/
|
||||||
|
REDIRECTION(300, 400, "Redirection"),
|
||||||
|
/**
|
||||||
|
* The client error class (4xx)
|
||||||
|
*/
|
||||||
|
CLIENT_ERROR(400, 500, "Client Error"),
|
||||||
|
/**
|
||||||
|
* The server error class (5xx)
|
||||||
|
*/
|
||||||
|
SERVER_ERROR(500, 600, "Server Error"),
|
||||||
|
/**
|
||||||
|
* The unknown class
|
||||||
|
*/
|
||||||
|
UNKNOWN(0, 0, "Unknown Status") {
|
||||||
|
@Override
|
||||||
|
public boolean contains(int code) {
|
||||||
|
return code < 100 || code >= 600;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the class of the specified HTTP status code.
|
||||||
|
*/
|
||||||
|
public static HttpStatusClass valueOf(int code) {
|
||||||
|
if (INFORMATIONAL.contains(code)) {
|
||||||
|
return INFORMATIONAL;
|
||||||
|
}
|
||||||
|
if (SUCCESS.contains(code)) {
|
||||||
|
return SUCCESS;
|
||||||
|
}
|
||||||
|
if (REDIRECTION.contains(code)) {
|
||||||
|
return REDIRECTION;
|
||||||
|
}
|
||||||
|
if (CLIENT_ERROR.contains(code)) {
|
||||||
|
return CLIENT_ERROR;
|
||||||
|
}
|
||||||
|
if (SERVER_ERROR.contains(code)) {
|
||||||
|
return SERVER_ERROR;
|
||||||
|
}
|
||||||
|
return UNKNOWN;
|
||||||
|
}
|
||||||
|
|
||||||
|
private final int min;
|
||||||
|
private final int max;
|
||||||
|
private final AsciiString defaultReasonPhrase;
|
||||||
|
|
||||||
|
HttpStatusClass(int min, int max, String defaultReasonPhrase) {
|
||||||
|
this.min = min;
|
||||||
|
this.max = max;
|
||||||
|
this.defaultReasonPhrase = new AsciiString(defaultReasonPhrase);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns {@code true} if and only if the specified HTTP status code falls into this class.
|
||||||
|
*/
|
||||||
|
public boolean contains(int code) {
|
||||||
|
return code >= min && code < max;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the default reason phrase of this HTTP status class.
|
||||||
|
*/
|
||||||
|
AsciiString defaultReasonPhrase() {
|
||||||
|
return defaultReasonPhrase;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user