Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Jersey客户端HTTP post请求中发布原始json文本?_Java_Json_Jersey_Http Post - Fatal编程技术网

Java 如何在Jersey客户端HTTP post请求中发布原始json文本?

Java 如何在Jersey客户端HTTP post请求中发布原始json文本?,java,json,jersey,http-post,Java,Json,Jersey,Http Post,我想发出一个httppost请求,要求参数必须作为原始JSON文本传递,但我不知道如何使用Jersey客户端。 以下是API规范(在Postman Rest客户端中运行良好):(请看我的Postman的屏幕截图,正文中的URL、参数和两个标题的内容类型为:application/json&Accept:application/json) 以下是我试过的球衣: JsonObject parameters = new JsonObject(); parameters.addProperty("ce

我想发出一个
httppost
请求,要求参数必须作为原始JSON文本传递,但我不知道如何使用Jersey客户端。
以下是API规范(在Postman Rest客户端中运行良好):(请看我的Postman的屏幕截图,正文中的URL、参数和两个标题的内容类型为:application/json&Accept:application/json)
以下是我试过的球衣:

JsonObject parameters = new JsonObject();
parameters.addProperty("centerId", centerId);
parameters.addProperty("studentId", studentId);

if (fromDate != null) {
    parameters.addProperty("fromDate", fromDate);
}
if (toDate != null) {
    parameters.addProperty("toDate", toDate);
}

Object response = client.target("http://localhost:8080/rest").path("student/calendar")
    .request(MediaType.APPLICATION_JSON).post(Entity.json(parameters), String.class);

但什么都没用。在这种情况下,有人能提出处理泽西的正确方法吗?谢谢。

使用
InputStream
进行实体构建,它应该可以工作

String payload = "{\"schoolId\":1,\"studentId\":1,\"fromDate\":\"1454259600000\",\"toDate\":\"1456765200000\"}";

client.target("<targetURI>")
.request(MediaType.APPLICATION_JSON)
.post(Entity.entity(
    new ByteArrayInputStream(payload.getBytes()),
    MediaType.APPLICATION_JSON
));
String payload=“{\'schoolId\':1,\'studentId\':1,\'fromDate\':\'1454259600000\',\'toDate\':\'1456765200000\'”;
客户端。目标(“”)
.request(MediaType.APPLICATION_JSON)
.职位(实体(
新建ByteArrayInputStream(payload.getBytes()),
MediaType.APPLICATION_JSON
));

但是最后,
Entity.json(有效负载)
也应该起作用。

您没有使用“原始”json。您正在使用
JsonObject
。原始JSON是字符串。如果将
JsonObject
的字符串值传递给
Entity.json
,它应该可以工作。否则,您将需要一个Jersey提供程序,它知道如何序列化
JsonObject
。实际上在
Entity.json()
中,我传递了
parameters.toString()
,而不是
parameter
,它生成了确切的json负载,但仍然不起作用。您能粘贴接收到的异常吗?我尝试了这个
.request(MediaType.APPLICATION\ujson).post(Entity.JSON(parameters.toString())、String.class)
.request(MediaType.APPLICATION_JSON).post(Entity.Entity(parameters.toString(),MediaType.APPLICATION_JSON))这两个都对我有用。但是,对于以后的操作,您需要接受它作为响应对象,然后调用
Response.readEntity(String.class)
来获取内容。这是我的有效负载字符串:
String payload=“{“schoolId”:1,“studentId”:1,“fromDate:“1454259600000”,“toDate:“1456765200000”}”
。下面是我尝试使用它们时得到的结果:
client.target(“”).request(MediaType.APPLICATION_JSON).post(Entity.Entity(payload,MediaType.APPLICATION_JSON))-->400错误的请求
client.target(“”).Request(MediaType.APPLICATION_JSON).post(Entity.JSON(payload),String.class)-->400错误请求我是否需要集成Jackson来填充JSON数据?我尝试过很多次,使用了很多API端点,但它们总是返回400个错误的请求,尽管我应用了您的建议。这不起作用