Джерси (JSR-311), как реализовать @POST в шаблоне контейнера - PullRequest
1 голос
/ 25 января 2011

из netbeans, я создал новый веб-сервис REST (используя джерси), используя встроенные мастера.в классе ресурсов контейнера, он создал заглушку,

@POST
@Consumes("application/json")
@Produces("application/json")
public Response postJson(Identity identity) {
    identities.addIdentity(identity);
    return Response.status(Status.OK).entity(identity).build();
}

как я POST к этому?Насколько я понимаю, нужно опубликовать пары имя = вал.что ждет джерси здесь?Как бы я опубликовать JSON к этому с помощью, скажем, curl?вот что я попробовал,

#!/bin/bash

DATA="{ \"id\": \"$1\", \"vcard\": \"$2\", \"location\": { \"latitude\": \"$3\", \"longitude\": \"$4\" } }"
echo "posting: $DATA"
HEADER='Content-Type:application/json'
URL='http://localhost:8080/contacthi-proximity-service/resources/is'
curl --data-binary "${DATA}" -H "${HEADER}" "${URL}"

когда я публикую это и посмотрю на входящий объект идентификации, все поля равны нулю?Я подозреваю, что мой JSON неверен.Когда я вручную добавляю объект в свой контейнер, затем формирую get, я вижу этот результат,

{"identities":{"id":"Foo Bar","vcard":"VCARD123","location":{"latitude":"-1.0","longitude":"-1.0"}}}

, когда я пытаюсь опубликовать одно и то же, все поля становятся пустыми.Я также пытался,

{"id":"Foo Bar","vcard":"VCARD123","location":{"latitude":"-1.0","longitude":"-1.0"}}

тот же результат.?спасибо.

спасибо.

1 Ответ

1 голос
/ 25 января 2011

Чтобы отправить запросы этому методу с помощью curl, вам нужно использовать что-то вроде:

HEADER='--header Content-Type:application/json'
URL='http://localhost:<port>/methodName'
curl --data-binary request.json ${HEADER} ${URL} -D response.txt

Вы можете передать строку в метод. Приведенный выше код выберет строку json из указанного файла. Пример JSON может быть:

{"userName":"test","timestamp":"2010-08-05T11:35:32.982-0800","userId":"0982"}

Для создания ответа вы можете использовать что-то вроде:

return Response.status(Status.OK).entity(responseString).build();

Используемые классы:

import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
...