Jax-rs (Джерси) для поиска массива объекта Json в запросе POST
Использование jax-rs (Jersey) Я пытаюсь реализовать запрос POST, который принимает список объектов JSON
//The resource look like this
@Path("/path")
@POST
@Consumes(MediaType.APPLICATION_JSON)
public void setJsonl(List<SomeObj> test) {
//do work
System.out.println(test);
}
//The class to define the json structure
@XmlRootElement
public class SomeObj{
private String tag;
private String value;
public String getTag() {
return tag;
}
public void setTag(String tag) {
this.tag = tag;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
как всегда, когда я пытаюсь проверить REST api с помощью curl, я всегда получаю ошибку "плохой запрос", я что-то здесь не вижу?
curl -X POST -H "Content-Type: application/json" -d '{"SomeObj":[{"tag":"abc", "value":"ghi"},{"tag":"123", "value":"456"}]}' http://{host_name}:8080/path_to_resource
Ответы
Ответ 1
Если вы не возражаете изменить подпись своего метода:
import org.json.JSONArray;
//The resource look like this
@Path("/path")
@POST
@Consumes(MediaType.APPLICATION_JSON)
public void setJsonl(String array){
JSONArray o = new JSONArray(last_data);
System.out.println(o.toString());
Ответ 2
поздний ответ, но может быть полезен для других
Опубликовать это:
[{ "tag": "abc", "value": "ghi" }, { "tag": "123", "value": "456" }]
Потому что, отправив это:
{ "SomeObj": [{ "tag": "abc", "value": "ghi" }, { "tag": "123", "value": "456" }]}
вы отправляете объект с единственным свойством "SomeObj" named. вы не отправляете массив
Ответ 3
Попробуйте обернуть массив JSON внутри объекта, например:
@XmlRootElement
public class SomeObjListWrapper {
private List<SomeObj> list;
// getters and setters
}
curl -X POST -H "Content-Type: application/json" -d '{"list":[{"tag":"abc", "value":"ghi"},{"tag":"123", "value":"456"}]}' http://{host_name}:8080/path_to_resource
Ответ 4
На стороне сервера:
import _root_.org.codehaus.jettison.json.{JSONArray, JSONObject}
@POST
@Path("/wants-json-array")
@Consumes(Array(MediaType.APPLICATION_JSON))
def wantsJSONArray(array: JSONArray): Response =
{
// here your array
}
И на стороне клиента:
$.ajax(
{
type: "GET",
url: '/your-web-service/wants-json-array',
data: JSON.stringify(THEARRAYYOUARESENDINGTOTHESERVER),
contentType: "application/json",
dataType: "json",
processData: false
});