如果是get请求,获取查询参数的方法如下:
@Get public String play(){ Form form = getRequest().getResourceRef().getQueryAsForm() ; //获取查询参数 String movie = form.getFirstValue("movie"); //获取key=movie的参数值 return "电影正在播放,电影名称:" + movie; }
如果是通过restlet客户端调用。代码如下:
@Test public void test01() throws IOException{ ClientResource client = new ClientResource("http://localhost:8888/?movie=xxx"); Representation result = client.get() ; //调用get方法 System.out.println(result.getText()); }
如果是Post请求。获取请求参数的方式就有些区别了。
服务端可以如下的方式定义Resource方法
@Post public String pause(String movie){ return movie + "暂停..."; }
@Test public void test02() throws IOException{ ClientResource client = new ClientResource("http://localhost:8080/"); Representation result = client.post("速度与激情6") ; //调用post方法 System.out.println(result.getText()); }
注意:
浏览器发送get请求可以直接在地址栏输入url?name=xx这样如访问服务端的资源
但是post请求是不行的。例如如下的表单。提交后,服务端返回的内容为: movie=xxx暂停
其实应该返回内容: xxx暂停 才正确
<form action="http://localhost:8080/" method="post" target="_blank"> <input name="movie" value="xxx" /> <input type="submit" value="Post请求" /> </form>
其实Post请求服务端方法的参数获取的是客户端通过post请求发送过来的请求体。跟参数名称没有关系。客户端也不需要知道参数定义的名称,如果客户端发送post请求带有参数,直接在请求体中加入参数值就可以了,并不需要参数名
浏览器发送post请求时查询参数不是直接在url中,而是在请求体中。 而浏览器发送post的请求体的格式就是name1=value1&name2=value2这样的格式。 所以上面用浏览器发送post请求时获取的参数格式不正确