使用OkHttp发送JSON请求

3

朋友们!

我有一个简单的HTTP请求:

void postRequest(String postUrl,String phone, String message) throws IOException {

    OkHttpClient client = new OkHttpClient();

    //RequestBody body = RequestBody.create(JSON, postBody);
    RequestBody body = new FormBody.Builder()
            .add("phone", phone)
            .add("message", message)
            .build();

    Request request = new Request.Builder()
            .url(postUrl)
            .post(body)
            .build();
    //System.out.println(request);

    client.newCall(request).enqueue(new Callback() {
        @Override
        public void onFailure(Call call, IOException e) {
            call.cancel();
        }

        @Override
        public void onResponse(Call call, Response response) throws IOException {
            Log.d("TAG",response.body().string());
        }
    });
}

如何正确实现发送JSON对象而不是简单参数?我的尝试都没有成功,所以我真的需要一个提示。

接受JSON的服务器正在运行AKKA-HTTP。我该如何正确地向此服务器发送请求?

final case class Message(phone: String, message: String, service: String)
  implicit val item = jsonFormat3(Message)
  val queue: Queue[Message] = Queue()

val addMessage = post {
      path("add_message"){
        parameters("phone".as[String], "message".as[String], "service".as[String]){
          (phone, message, service) => {
            queue.enqueue(Message(phone, message, service))
            complete("ok")
          }
        }
      }
    }
2个回答

0
将对象映射和序列化为JSON格式的最简单方法是使用ObjectMapper类,该类属于jackson-databind库。

我个人使用它来实现RestController的集成测试,效果非常好。这是我编写的实用程序类,您可以使用它来实现您的目的:

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

public final class JsonUtils {

    public static String json(Object obj) throws JsonProcessingException {
        ObjectMapper objectMapper = new ObjectMapper();
        return objectMapper.writeValueAsString(obj);
    }
}

你需要拥有一个实现了 Serializable 接口的 POJO 类,然后将该类的实例传递给 json 方法,它会返回 JSON 格式。

你绝对可以在 Android 项目中使用它。我发现许多示例都可以添加依赖项,但这取决于你是使用 Gradle 还是 Maven。

试一下吧!!!


好的,我会看一下POJO对象的具体样子。 - Mardaunt
如果它有效并且您对答案满意,请接受它,这样将有助于其他开发者。谢谢。 - Marco Tizzano

0
你觉得这个选项怎么样? 我试着实现它,但发送失败了。 我缺少一个重要的细节。但我不知道是什么。
// create your json here
JSONObject jsonObject = new JSONObject();
try {
    jsonObject.put("KEY1", "VALUE1");
    jsonObject.put("KEY2", "VALUE2");
} catch (JSONException e) {
    e.printStackTrace();
}

  OkHttpClient client = new OkHttpClient();
  MediaType JSON = MediaType.parse("application/json; charset=utf-8");
  // put your json here
  RequestBody body = RequestBody.create(JSON, jsonObject.toString());
  Request request = new Request.Builder()
                    .url("https://YOUR_URL/")
                    .post(body)
                    .build();

  Response response = null;
  try {
      response = client.newCall(request).execute();
      String resStr = response.body().string();
  } catch (IOException e) {
      e.printStackTrace();
  }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接