如何创建一个空虚拟HttpResponse

时间:2010-06-08 11:13:46

标签: java

我正在使用org.apache.http.HttpResponse

我想创建一个空的虚拟resposne,我将使用它在发生错误时返回,而不是传回null。

我试图创造一个,它已经失去了奇怪的参数。有人可以告诉我如何创建一个。

5 个答案:

答案 0 :(得分:19)

根据您使用的公共版本,您可能需要尝试DefaultHttpResponseFactory。这是图书馆在内部创建部分内容的方式,因此可能会或可能不会达到您的目的。

import org.apache.http.HttpStatus;
import org.apache.http.HttpResponse;
import org.apache.http.HttpResponseFactory;
import org.apache.http.HttpVersion;
import org.apache.http.impl.DefaultHttpResponseFactory;
import org.apache.http.message.BasicStatusLine;

HttpResponseFactory factory = new DefaultHttpResponseFactory();
HttpResponse response = factory.newHttpResponse(new BasicStatusLine(HttpVersion.HTTP_1_1, HttpStatus.SC_OK, null), null);

答案 1 :(得分:1)

使用无操作方法实现HttpResponse

答案 2 :(得分:0)

实际上,实现HttpServletResponse看起来相当多,并且您将依赖于实际的Servlet实现。

我想我会使用request.getRequestDispatcher("/dummy.html").forward(request, response)

答案 3 :(得分:0)

您可以创建一个返回带有状态代码的 HttpResponse 的方法:

public HttpResponse<String> createDummyResponse(int statusCode) {
    return new HttpResponse<>() {
        @Override
        public int statusCode() {
            return statusCode;
        }

        @Override
        public HttpRequest request() {
            return null;
        }

        @Override
        public Optional<HttpResponse<String>> previousResponse() {
            return Optional.empty();
        }

        @Override
        public HttpHeaders headers() {
            return null;
        }

        @Override
        public String body() {
            return null;
        }

        @Override
        public Optional<SSLSession> sslSession() {
            return Optional.empty();
        }

        @Override
        public URI uri() {
            return null;
        }

        @Override
        public HttpClient.Version version() {
            return null;
        }
    };
}

您可以将其他属性(例如正文等)作为参数传递给方法 createDummyResponse。

答案 4 :(得分:0)

这个版本增加了实体内容,更紧凑一点:

import org.apache.http.HttpResponse;
import org.apache.http.HttpVersion.HTTP_1_1;
import org.apache.http.entity.ContentType.TEXT_HTML;
import org.apache.http.entity.StringEntity;
import org.apache.http.message.BasicHttpResponse;
import org.springframework.http.HttpStatus;

public static HttpResponse buildResponse(HttpStatus status, String text){
    
       HttpResponse response = BasicHttpResponse(HTTP_1_1, status.value(), status.reasonPhrase);
       response.setEntity(StringEntity(text, TEXT_HTML));
       return response;
    }

请注意,我使用 Spring HttpStatus 只是为了方便起见,但可以使用参数进行更改