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个错误的请求,尽管我应用了您的建议。这不起作用