[netty5: HttpObject]-源码解析

发布于:2025-07-06 ⋅ 阅读:(22) ⋅ 点赞:(0)

HttpObject

HttpObject 是所有 HTTP 消息对象的父接口,继承 DecoderResultProvider,表示它们都能提供解码结果。

public interface HttpObject extends DecoderResultProvider {}

DecoderResultProvider

DecoderResultProvider是定义了获取和设置解码结果(DecoderResult)的方法的接口。

public interface DecoderResultProvider {

    DecoderResult decoderResult();
    
    void setDecoderResult(DecoderResult result);
}

DecoderResult

DecoderResult 是一个标准的解码状态表示类,封装了是否成功和失败原因。

public class DecoderResult {

    private static final DecoderResult SUCCESS = new DecoderResult();

    public static DecoderResult failure(Throwable cause) {
        requireNonNull(cause, "cause");
        return new DecoderResult(cause);
    }

    public static DecoderResult success() {
        return SUCCESS;
    }

    private final Throwable cause;

    protected DecoderResult(Throwable cause) {
        this.cause = requireNonNull(cause, "cause");
    }

    protected DecoderResult() {
        this.cause = null;
    }

    public final boolean isSuccess() {
        return cause == null;
    }

    public final boolean isFailure() {
        return cause != null;
    }

    public final Throwable cause() {
        return cause;
    }

    @Override
    public String toString() {
        if (isSuccess()) {
            return "success";
        }

        String cause = cause().toString();
        return new StringBuilder(cause.length() + 17)
                .append("failure(")
                .append(cause)
                .append(')')
                .toString();
    }
}

HttpContent

HttpContent 表示HTTP消息的内容体(body),它能给你拿到数据(payload()),还能复制一份内容(copy())

public interface HttpContent<R extends HttpContent<R>> extends HttpObject, Resource<R> {

    Buffer payload();

    R copy();
}

LastHttpContent

LastHttpContent 是HttpContent的子接口,表示消息体的最后一块数据,还能拿到额外的尾部头信息(trailingHeaders()),比如分块传输时用。

public interface LastHttpContent<R extends LastHttpContent<R>> extends HttpContent<R> {
    HttpHeaders trailingHeaders();
}

HttpMessage

代表一条HTTP消息的基础抽象,有协议版本(protocolVersion())和消息头(headers()),能设置协议版本。

public interface HttpMessage extends HttpObject {

    HttpVersion protocolVersion();

    HttpMessage setProtocolVersion(HttpVersion version);


    HttpHeaders headers();
}

HttpRequest

HttpRequest 是HttpMessage的请求版本,带请求方法(GET/POST等)和请求地址URI。

public interface HttpRequest extends HttpMessage {

    HttpMethod method();
    
    HttpRequest setMethod(HttpMethod method);

    String uri();

    HttpRequest setUri(String uri);

    @Override
    HttpRequest setProtocolVersion(HttpVersion version);
}

HttpResponse

HttpResponse 是HttpMessage的响应版本,带响应状态码(200 OK,404等)。

public interface HttpResponse extends HttpMessage {

    HttpResponseStatus status();

    HttpResponse setStatus(HttpResponseStatus status);

    @Override
    HttpResponse setProtocolVersion(HttpVersion version);
}

FullHttpMessage

继承了HttpMessage和LastHttpContent,表示既有完整头信息又有完整内容体的HTTP消息。

public interface FullHttpMessage<R extends FullHttpMessage<R>> extends HttpMessage, LastHttpContent<R> {}

FullHttpRequest

FullHttpRequest 是带完整头和体的 HTTP 请求对象

public interface FullHttpRequest extends HttpRequest, FullHttpMessage<FullHttpRequest> {
    @Override
    FullHttpRequest setProtocolVersion(HttpVersion version);

    @Override
    FullHttpRequest setMethod(HttpMethod method);

    @Override
    FullHttpRequest setUri(String uri);
}

FullHttpResponse

FullHttpResponse 是带完整头和体的 HTTP 响应对象。

public interface FullHttpResponse extends HttpResponse, FullHttpMessage<FullHttpResponse> {
    @Override
    FullHttpResponse setProtocolVersion(HttpVersion version);

    @Override
    FullHttpResponse setStatus(HttpResponseStatus status);
}