如何从 HttpServletRequest 创建 okhttp3 请求?

use*_*192 5 java servlets okhttp okhttp3

当我的 Java Web 应用程序收到一个 HTTP POST 请求时,它需要从 HttpServletRequest 创建一个新的 OkHttp3 请求并将其发送到另一个 URL。原始发布请求可以是简单的表单数据或多部分。

这是我希望实现的接口:

import okhttp3.Request;

public interface OkHttp3RequestBuilder {
    Request create(HttpServletRequest request);
}
Run Code Online (Sandbox Code Playgroud)

看起来挑战归结为我将如何创建 okhttp3.RequestBody。这是实现的相关部分......

    final HttpUrl targetUrl = HttpUrl.get("http://internal.xyz.com");

    final RequestBody requestBody = // ?????
    final Request httpRequest = new Request.Builder()
            .post(requestBody)
            .url(targetUrl)
            .build();
    return httpRequest;
Run Code Online (Sandbox Code Playgroud)

我该怎么做?有什么建议?谢谢!

use*_*192 1

感谢您的回答,ETL!这似乎对我有用:

@Override
public RequestBody getRequestBody(final HttpServletRequest httpServletRequest) throws IOException {

    final InputStream inputStream = httpServletRequest.getInputStream();

    final byte[] requestBodyBytes = ByteStreams.toByteArray(inputStream);

    final String contentType = httpServletRequest.getContentType();

    final MediaType mediaType = MediaType.parse(contentType);

    final RequestBody requestBody = RequestBody.create(mediaType, requestBodyBytes);

    return requestBody;
}
Run Code Online (Sandbox Code Playgroud)