首页 > 解决方案 > 在请求 OkHttp 中发送 JSON

问题描述

朋友们!

我有一个简单的 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")
          }
        }
      }
    }

标签: javaandroidscalaokhttpakka-http

解决方案


以 JSON 格式映射和序列化对象的最简单方法是使用jackson-databind库的ObjectMapper类。

我个人用它来实现RestControllers的集成测试,效果很好。这是我实现的实用程序类,您可以将其用于您的目的:

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

您需要的是一个 POJO 类,它实现了Serializable,然后将您的类的实例传递给该json方法,它将返回 JSON 格式。

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

试试看!!!


推荐阅读