【问题标题】:Pass a parameter to REST web service via URL通过 URL 将参数传递给 REST Web 服务
【发布时间】:2010-11-09 14:28:41
【问题描述】:

我正在使用 Netbeans 创建一个小型 REST Web 服务。这是我的代码:

private UriInfo context;
private String name;

public GenericResource() {
}

@GET
@Produces("text/html")
public String getHtml() {
    //TODO return proper representation object
    return "Hello "+ name;
}


@PUT
@Consumes("text/html")
public void putHtml(String name) {
    this.name = name;
}

我调用 get 方法没问题,因为当我调用 http://localhost:8080/RestWebApp/resources/greeting 时,我得到“Hello null”,但我正在尝试使用 http://localhost:8080/RestWebApp/resources/greeting?name=Krt_Malta 传递参数,但没有调用 PUT 方法......这是传递参数的正确方法还是我遗漏了什么?

我是 Rest bdw 的新手,如果这是一个简单的问题,请原谅。

谢谢! :) Krt_马耳他

【问题讨论】:

  • 你用什么来调用 URL?你试过 curl -X PUT http://...?

标签: rest netbeans


【解决方案1】:

第二个 URL 是一个普通的 GET 请求。要将数据传递给 PUT 请求,您必须使用表单传递它。据我所知,该 URL 是为 GET 保留的。

【讨论】:

    【解决方案2】:

    如果您自己构建 HTTP-header,则必须使用 POST 而不是 GET:

    GET /RestWebApp/resources/greeting?name=Krt_Malta HTTP/1.0
    

    POST /RestWebApp/resources/greeting?name=Krt_Malta HTTP/1.0
    

    如果您使用 HTML 表单,则必须将方法属性设置为“PUT”:

    <form action="/RestWebApp/resources/greeting" method="PUT">
    

    【讨论】:

      【解决方案3】:

      要让 JAX-RS 匹配带有 @PUT 注释的方法,您需要提交 PUT 请求。普通浏览器不这样做,但可以使用 cURL 或 HTTP 客户端库。

      为了将查询参数映射到方法参数,JAX-RS 提供了@QueryParam 注释。

      public void putWithQueryParam(@QueryParam("name") String name) {
        // do something
      }
      

      【讨论】:

        【解决方案4】:

        你可以设置:

        @PUT
        @path{/putHtm}
        @Consumes("text/html")
        public void putHtml(String name) {
            this.name = name;
        }
        

        如果你使用谷歌的 Volley 库之类的东西,你可以做到。

                GsonRequest<String> asdf = new GsonRequest<String>(ConnectionProperties.happyhourURL + "/putHtm", String.class, yourString!!, true,
                        new Response.Listener<Chain>() {
                            @Override
                            public void onResponse(Chain response) {
        
                            }
                        }, new CustomErrorListener(this));
                MyApplication.getInstance().addToRequestQueue(asdf);
        

        GsonRequest 看起来像:

        public GsonRequest(String url, Class<T> _clazz, T object, boolean needLogin, Listener<T> successListener, Response.ErrorListener errorlistener) {
            super(Method.PUT, url, errorlistener);
            _headers = new HashMap<String, String>();
            this._clazz = _clazz;
            this.successListener = successListener;
            this.needsLogin = needLogin;
            _object = object;
            setTimeout();
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-07-10
          • 2010-11-07
          • 1970-01-01
          • 1970-01-01
          • 2019-05-19
          • 2012-04-12
          • 1970-01-01
          • 2016-01-04
          相关资源
          最近更新 更多