Does OkHttp have something easier similar to Unirest's field method for creating a RequestBody?












1















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 thefieldmethod to add to the itsRequestBody`:



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?










share|improve this question



























    1















    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 thefieldmethod to add to the itsRequestBody`:



    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?










    share|improve this question

























      1












      1








      1








      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 thefieldmethod to add to the itsRequestBody`:



      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?










      share|improve this question














      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 thefieldmethod to add to the itsRequestBody`:



      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?







      java okhttp unirest






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 22 '18 at 0:02









      Rigo SarmientoRigo Sarmiento

      14710




      14710
























          2 Answers
          2






          active

          oldest

          votes


















          0














          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()
          );





          share|improve this answer































            0














            OkHttp doesn't have asJson. You can add a custom interceptor or implement a separate JSONObject.



            Build JSON using JSONObject:



            JSONObject jsonObject = new JSONObject();
            try {
            jsonObject.put("username", "yourEmail@com");
            jsonObject.put("password", "yourPassword");
            jsonObject.put("anyKey", "anyValue");
            } catch (JSONException e) {
            e.printStackTrace();
            }


            Then call OkHttp like this:



            public static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");

            OkHttpClient client = new OkHttpClient();

            String post(String url, String json) throws IOException {
            RequestBody body = RequestBody.create(JSON, json);
            Request request = new Request.Builder()
            .url(url)
            .post(body)
            .build();

            Response response = client.newCall(request).execute();
            return response.body().string();
            }


            The authors of okhttp use strings: https://github.com/square/okhttp/blob/master/samples/guide/src/main/java/okhttp3/guide/PostExample.java






            share|improve this answer

























              Your Answer






              StackExchange.ifUsing("editor", function () {
              StackExchange.using("externalEditor", function () {
              StackExchange.using("snippets", function () {
              StackExchange.snippets.init();
              });
              });
              }, "code-snippets");

              StackExchange.ready(function() {
              var channelOptions = {
              tags: "".split(" "),
              id: "1"
              };
              initTagRenderer("".split(" "), "".split(" "), channelOptions);

              StackExchange.using("externalEditor", function() {
              // Have to fire editor after snippets, if snippets enabled
              if (StackExchange.settings.snippets.snippetsEnabled) {
              StackExchange.using("snippets", function() {
              createEditor();
              });
              }
              else {
              createEditor();
              }
              });

              function createEditor() {
              StackExchange.prepareEditor({
              heartbeatType: 'answer',
              autoActivateHeartbeat: false,
              convertImagesToLinks: true,
              noModals: true,
              showLowRepImageUploadWarning: true,
              reputationToPostImages: 10,
              bindNavPrevention: true,
              postfix: "",
              imageUploader: {
              brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
              contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
              allowUrls: true
              },
              onDemand: true,
              discardSelector: ".discard-answer"
              ,immediatelyShowMarkdownHelp:true
              });


              }
              });














              draft saved

              draft discarded


















              StackExchange.ready(
              function () {
              StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53422134%2fdoes-okhttp-have-something-easier-similar-to-unirests-field-method-for-creating%23new-answer', 'question_page');
              }
              );

              Post as a guest















              Required, but never shown

























              2 Answers
              2






              active

              oldest

              votes








              2 Answers
              2






              active

              oldest

              votes









              active

              oldest

              votes






              active

              oldest

              votes









              0














              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()
              );





              share|improve this answer




























                0














                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()
                );





                share|improve this answer


























                  0












                  0








                  0







                  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()
                  );





                  share|improve this answer













                  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()
                  );






                  share|improve this answer












                  share|improve this answer



                  share|improve this answer










                  answered Nov 22 '18 at 1:39









                  Rigo SarmientoRigo Sarmiento

                  14710




                  14710

























                      0














                      OkHttp doesn't have asJson. You can add a custom interceptor or implement a separate JSONObject.



                      Build JSON using JSONObject:



                      JSONObject jsonObject = new JSONObject();
                      try {
                      jsonObject.put("username", "yourEmail@com");
                      jsonObject.put("password", "yourPassword");
                      jsonObject.put("anyKey", "anyValue");
                      } catch (JSONException e) {
                      e.printStackTrace();
                      }


                      Then call OkHttp like this:



                      public static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");

                      OkHttpClient client = new OkHttpClient();

                      String post(String url, String json) throws IOException {
                      RequestBody body = RequestBody.create(JSON, json);
                      Request request = new Request.Builder()
                      .url(url)
                      .post(body)
                      .build();

                      Response response = client.newCall(request).execute();
                      return response.body().string();
                      }


                      The authors of okhttp use strings: https://github.com/square/okhttp/blob/master/samples/guide/src/main/java/okhttp3/guide/PostExample.java






                      share|improve this answer






























                        0














                        OkHttp doesn't have asJson. You can add a custom interceptor or implement a separate JSONObject.



                        Build JSON using JSONObject:



                        JSONObject jsonObject = new JSONObject();
                        try {
                        jsonObject.put("username", "yourEmail@com");
                        jsonObject.put("password", "yourPassword");
                        jsonObject.put("anyKey", "anyValue");
                        } catch (JSONException e) {
                        e.printStackTrace();
                        }


                        Then call OkHttp like this:



                        public static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");

                        OkHttpClient client = new OkHttpClient();

                        String post(String url, String json) throws IOException {
                        RequestBody body = RequestBody.create(JSON, json);
                        Request request = new Request.Builder()
                        .url(url)
                        .post(body)
                        .build();

                        Response response = client.newCall(request).execute();
                        return response.body().string();
                        }


                        The authors of okhttp use strings: https://github.com/square/okhttp/blob/master/samples/guide/src/main/java/okhttp3/guide/PostExample.java






                        share|improve this answer




























                          0












                          0








                          0







                          OkHttp doesn't have asJson. You can add a custom interceptor or implement a separate JSONObject.



                          Build JSON using JSONObject:



                          JSONObject jsonObject = new JSONObject();
                          try {
                          jsonObject.put("username", "yourEmail@com");
                          jsonObject.put("password", "yourPassword");
                          jsonObject.put("anyKey", "anyValue");
                          } catch (JSONException e) {
                          e.printStackTrace();
                          }


                          Then call OkHttp like this:



                          public static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");

                          OkHttpClient client = new OkHttpClient();

                          String post(String url, String json) throws IOException {
                          RequestBody body = RequestBody.create(JSON, json);
                          Request request = new Request.Builder()
                          .url(url)
                          .post(body)
                          .build();

                          Response response = client.newCall(request).execute();
                          return response.body().string();
                          }


                          The authors of okhttp use strings: https://github.com/square/okhttp/blob/master/samples/guide/src/main/java/okhttp3/guide/PostExample.java






                          share|improve this answer















                          OkHttp doesn't have asJson. You can add a custom interceptor or implement a separate JSONObject.



                          Build JSON using JSONObject:



                          JSONObject jsonObject = new JSONObject();
                          try {
                          jsonObject.put("username", "yourEmail@com");
                          jsonObject.put("password", "yourPassword");
                          jsonObject.put("anyKey", "anyValue");
                          } catch (JSONException e) {
                          e.printStackTrace();
                          }


                          Then call OkHttp like this:



                          public static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");

                          OkHttpClient client = new OkHttpClient();

                          String post(String url, String json) throws IOException {
                          RequestBody body = RequestBody.create(JSON, json);
                          Request request = new Request.Builder()
                          .url(url)
                          .post(body)
                          .build();

                          Response response = client.newCall(request).execute();
                          return response.body().string();
                          }


                          The authors of okhttp use strings: https://github.com/square/okhttp/blob/master/samples/guide/src/main/java/okhttp3/guide/PostExample.java







                          share|improve this answer














                          share|improve this answer



                          share|improve this answer








                          edited Nov 22 '18 at 1:55

























                          answered Nov 22 '18 at 1:44









                          Allen HacksAllen Hacks

                          175




                          175






























                              draft saved

                              draft discarded




















































                              Thanks for contributing an answer to Stack Overflow!


                              • Please be sure to answer the question. Provide details and share your research!

                              But avoid



                              • Asking for help, clarification, or responding to other answers.

                              • Making statements based on opinion; back them up with references or personal experience.


                              To learn more, see our tips on writing great answers.




                              draft saved


                              draft discarded














                              StackExchange.ready(
                              function () {
                              StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53422134%2fdoes-okhttp-have-something-easier-similar-to-unirests-field-method-for-creating%23new-answer', 'question_page');
                              }
                              );

                              Post as a guest















                              Required, but never shown





















































                              Required, but never shown














                              Required, but never shown












                              Required, but never shown







                              Required, but never shown

































                              Required, but never shown














                              Required, but never shown












                              Required, but never shown







                              Required, but never shown







                              Popular posts from this blog

                              Wiesbaden

                              Marschland

                              Dieringhausen