开发者

Pass a parameter to REST web service via URL

I'm creating a small REST web service using Netbeans. This is my code:

private UriInfo context;
pr开发者_如何学Goivate 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;
}

I'm calling the get method ok since when I call http://localhost:8080/RestWebApp/resources/greeting I get "Hello null" but I'm trying to pass a parameter using http://localhost:8080/RestWebApp/resources/greeting?name=Krt_Malta but the PUT method is not being called... Is this the correct way to pass a parameter or am I missing something?

I'm a newbie to Rest bdw, so sry if it's a simple question.

Thanks! :) Krt_Malta


The second URL is a plain GET request. To pass data to a PUT request you have to pass it using a form. The URL is reserved for GET as far as I know.


If you build the HTTP-header yourself, you must use POST instead of GET:

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

versus

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

If you use a HTML-form, you must set the method-attribute to "PUT":

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


For JAX-RS to mactch a method annotated with @PUT, you need to submit a PUT request. Normal browsers don't do this but cURL or a HTTP client library can be used.

To map a query parameter to a method argument, JAX-RS provides the @QueryParam annotation.

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


You can set:

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

and if you use something like google`s Volley library you can do.

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

and GsonRequest will look like:

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜