如何使用JSON数据发布ajax调用到Jersey休息服务?

时间:2014-02-11 10:50:18

标签: java ajax post jersey jax-rs

我已经完成了这个link。但这并没有帮助我。

我正在使用jersey 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);
}

网址为:/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我总是得到空值。另一种解决方案是添加带有@XMLRootElement的JavaBean,它将java对象编组/解组为json,反之亦然,但我不想使用它。
有没有办法发布数据并使用适当的注释(如@QueryParam或类似的东西)接收数据? 请帮忙

3 个答案:

答案 0 :(得分:4)

您的服务器端代码应如下所示:

@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是一个用@XmlRootElement注释的(POJO)类,对应于客户端将发送的JSON数据(即,具有getter和setter的param1字段)。 JAX-RS实现将POST的主体解组为Data的实例。

@QueryParam注释用于检索(通常)GET请求中的查询参数。查询参数是问号后面的参数(?)。例如:@QueryParam("start") String start将在处理以下请求时将地图设置为1GET http://foo.com/bar?start=1,但这不是您在案例中所做的事情,即AFAICS。

答案 1 :(得分:1)

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();
    }

答案 2 :(得分:0)

@XMLRootElement是这样做的方法,因为在你可以使用它的任何元素之前必须解组json。