Как сделать 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 должен быть разобран до того, как вы сможете использовать любой из его элементов.

Другие вопросы по тегам