Instead of Unirest
, I'm using okhttp because there are responses where I only need the header so I don't need to download it using its ResponseBody.string()
method.
I am however having a hard time building my requests for POSTs
with a RequestBody
. In Unirest, you only need to use the
fieldmethod to add to the its
RequestBody`:
Unirest.post(baseUrl + "/api/user")
.header("Authorization", token)
.field("id", id)
.field("property", property)
.asJson();
But in OkHttp
, if I want to add a RequestBody
I have to do this (in most cases where I don't really have a json
lying around):
OkHttpClient httpClient = new OkHttpClient();
Map<String, Object> payload = new HashMap<>();
payload.put("user_id", userId);
payload.put("client_id", clientId);
payload.put("type", status.getStatus());
payload.put("description", "");
payload.put("duration", 0);
String requestBody = new ObjectMapper().writeValueAsString(payload);
Call call = httpClient.newCall(
new Request.Builder()
.url(url)
.header("Authorization", tempToken)
.post(RequestBody.create(MediaType.get("application/json"), requestBody))
.build()
);
I'm using a Map
to create a json
string because this is the easiest way for me to create a json
.
Does OkHttp
have something easier similar to Unirest
's field
method for creating a RequestBody?
I found okhttp
has FormBody
which has a Builder
:
Call call = httpClient.newCall(
new Request.Builder()
.url(url)
.header("Authorization", tempToken)
.post(new FormBody.Builder()
// TODO user getId()
.add("id","")
.add("custom_fields", field)
.build())
.build()
);