在请求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")
}
}
}
}

以JSON格式映射和序列化对象的最简单方法是使用jackson数据绑定库的ObjectMapper类

我个人用它来实现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。

试试看!!!

您觉得这个选项怎么样?我试图实现它,但发送失败了。我遗漏了一个重要的细节。但我不明白它是什么。

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

最新更新