jersey(JSR-311),如何在容器模式中实现@POST

时间:2011-01-25 17:48:28

标签: java rest netbeans jersey jsr311

来自netbeans,我使用内置向导创建了一个新的REST Web服务(使用泽西)。在容器资源类中,它创建了一个存根,

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

如何发帖到这个?我的理解是需要发布name = val对。什么球衣期待在这里?我怎么会使用say curl将json发布到这个?这是我试过的,

#!/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"}}}

当我尝试发布相同的内容时,所有字段都为null。我也试过了,

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

同样的结果。 ?感谢。

感谢。

1 个答案:

答案 0 :(得分:1)

要使用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;