Как сделать post ajax-вызов с данными JSON в службу отдыха Джерси?
Я прошел по этой ссылке. но это не помогло мне.
Я использую Джерси lib v1.17.1. Моя майка отдых службы:
@POST
@Consumes({MediaType.APPLICATION_JSON})
@Produces({MediaType.APPLICATION_JSON})
@Path("/post1")
public ResponseBean post1(@QueryParam("param1")String param1)
{
return ResponseFactory.createResponse(param1, "TEST", "TEST", null, true);
}
URL-адрес: /test/post1
Мой звонок по Ajax:
var d = {"param1":"just a dummy data"};
$.ajax({
type : "POST",
url : "http://localhost:7070/scl/rs/test/post1",
contentType :"application/json; charSet=UTF-8",
data : d,
dataType : "json"
})
.done(function(data){
console.log(data);
})
.fail(function(data){
console.log(data);
});
Это бьет по моей службе отдыха, но как param1
Я всегда получаю нулевое значение. Альтернативное решение - добавить JavaBean с @XMLRootElement
которая будет маршалировать / демаршалировать объект java для json и наоборот, но я не хочу использовать это.
Есть ли способ разместить данные и получить их, используя соответствующие аннотации, такие как @QueryParam
или что-то типа того? Пожалуйста помоги
3 ответа
Ваш код на стороне сервера должен быть таким:
@POST
@Consumes({MediaType.APPLICATION_JSON})
@Produces({MediaType.APPLICATION_JSON})
@Path("/post1")
public ResponseBean post1(Data param1)
{
return ResponseFactory.createResponse(param1, "TEST", "TEST", null, true);
}
где Data
класс (POJO), помеченный @XmlRootElement
и соответствует данным JSON, которые отправит ваш клиент (т.е. param1
поле с геттером и сеттером). Реализация JAX-RS демонтирует тело POST в экземпляр Data
,
@QueryParam
аннотация используется для получения параметров запроса в (обычно) GET
Запросы. Параметры запроса - это параметры после знака вопроса (?
). Например: @QueryParam("start") String start
карта будет установлена на 1
когда обрабатывается следующий запрос: GET http://foo.com/bar?start=1
, но это не то, что вы делаете в вашем случае, AFAICS.
You can simply take Post dat as a string and then you can parse it using JSONObject.
@POST
@Consumes({MediaType.APPLICATION_JSON})
@Produces({MediaType.APPLICATION_JSON})
@Path("/post1")
public Response postStrMsg(String msg) {
String output = "POST:Jersey say : " + msg;
return Response.status(200).entity(output).build();
}
@XMLRootElement - это способ сделать это, так как json должен быть разобран до того, как вы сможете использовать любой из его элементов.