如何从 HttpServletRequest 创建 okhttp3 请求?
How to create a okhttp3 Request from an HttpServletRequest?
当我的 Java Web 应用程序接收到 HTTP POST 请求时,它需要从 HttpServletRequest 创建一个新的 OkHttp3 请求并将其发送到另一个 URL。原始 post 请求可以是简单的表单数据或多部分。
这是我要实现的界面:
import okhttp3.Request;
public interface OkHttp3RequestBuilder {
Request create(HttpServletRequest request);
}
看来挑战归结为我将如何创建 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;
我该怎么做?有什么建议么?谢谢!
这应该可以,但是 request.getReader()
一定没有调用过,因为您只能调用一次。
Request create(HttpServletRequest request)
{
final HttpUrl targetUrl = HttpUrl.get("http://internal.xyz.com");
final String originalBody = request.getReader().lines().collect (Collectors.joining (System.lineSeparator()));
final RequestBody requestBody = RequestBody.create(MediaType.parse(request.getContentType()), originalBody);
final Request httpRequest = new Request.Builder()
.post(requestBody)
.url(targetUrl)
.build();
return httpRequest;
}
感谢您的回答,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;
}
当我的 Java Web 应用程序接收到 HTTP POST 请求时,它需要从 HttpServletRequest 创建一个新的 OkHttp3 请求并将其发送到另一个 URL。原始 post 请求可以是简单的表单数据或多部分。
这是我要实现的界面:
import okhttp3.Request;
public interface OkHttp3RequestBuilder {
Request create(HttpServletRequest request);
}
看来挑战归结为我将如何创建 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;
我该怎么做?有什么建议么?谢谢!
这应该可以,但是 request.getReader()
一定没有调用过,因为您只能调用一次。
Request create(HttpServletRequest request)
{
final HttpUrl targetUrl = HttpUrl.get("http://internal.xyz.com");
final String originalBody = request.getReader().lines().collect (Collectors.joining (System.lineSeparator()));
final RequestBody requestBody = RequestBody.create(MediaType.parse(request.getContentType()), originalBody);
final Request httpRequest = new Request.Builder()
.post(requestBody)
.url(targetUrl)
.build();
return httpRequest;
}
感谢您的回答,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;
}