【问题标题】:How to make post ajax call with JSON data to Jersey rest service?如何使用 JSON 数据对 Jersey 休息服务进行 post ajax 调用?
【发布时间】:2014-03-09 02:45:07
【问题描述】:

我经历过这个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之类的适当注释发布数据并接收它? 请帮忙

【问题讨论】:

    标签: java ajax post jersey jax-rs


    【解决方案1】:

    @XMLRootElement 是这样做的方法,因为必须先解组 json,然后才能使用它的任何元素。

    【讨论】:

      【解决方案2】:

      你的服务器端代码应该是这样的:

      @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。

      【讨论】:

        【解决方案3】:
        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();
            }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-11-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-04-08
          • 1970-01-01
          相关资源
          最近更新 更多