Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to create a okhttp3 Request from an HttpServletRequest?

When my Java web application receives an HTTP POST request, it needs to create a new OkHttp3 Request from the HttpServletRequest and send this to another URL. The original post request could be simple form data or multi-part.

Here's the interface that I am looking to implement:

import okhttp3.Request;

public interface OkHttp3RequestBuilder {
    Request create(HttpServletRequest request);
}

Looks like the challenge boils down to how I would create an okhttp3.RequestBody. Here's the relevant part of the implementation...

    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;

How do I go about doing it? Any suggestions? Thanks!

like image 630
user544192 Avatar asked Oct 29 '22 21:10

user544192


1 Answers

This should work, but request.getReader() must never have been called as you can call it only once.

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;
}
like image 66
ETL Avatar answered Nov 15 '22 06:11

ETL