在前面的章節(jié)中,我們已經(jīng)了解了幾個(gè)參數(shù)注解,比如 通過(guò) @PathParam 來(lái)獲取 URL 請(qǐng)求中的路徑參數(shù)。
@QueryParam 用于從請(qǐng)求 URL 的查詢組件中提取查詢參數(shù)。我們?cè)?MyResource 里面添加下面的方法:
@PUT
@Path("pojo")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public MyBean putPojo(@QueryParam("age") int age,
@QueryParam("name") String name) {
MyBean pojo = new MyBean();
pojo.setName(name);
pojo.setAge(age);
return pojo;
}
這個(gè) PUT 方法,將會(huì)接收從URL 傳遞過(guò)來(lái)的參數(shù) age,name ,而后將這些參數(shù)賦給對(duì)象 MyBean ,并且返回。
啟動(dòng)服務(wù),在 RESTClient 里面發(fā)送 PUT 請(qǐng)求 http://localhost:8080/webapi/myresource/pojo?age=28&name=waylau 。成功后就能接收到一個(gè) JSON 數(shù)據(jù)對(duì)象。
{
"age": 28,
"name": "waylau"
}
如果需要為參數(shù)設(shè)置默認(rèn)值,可以使用 @DefaultValue,如:
我們?cè)?MyResource 里面添加下面的方法:
@POST
@Path("pojo")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public MyBean postPojoDefault(@DefaultValue("21") @QueryParam("age") int age,
@DefaultValue("www.waylau.com")@QueryParam("name") String name) {
MyBean pojo = new MyBean();
pojo.setName(name);
pojo.setAge(age);
return pojo;
}
啟動(dòng)服務(wù),在 RESTClient 里面發(fā)送 POST 請(qǐng)求調(diào)用 http://localhost:8080/webapi/myresource/pojo
接口,如果該請(qǐng)求包含參數(shù),則將參數(shù)值以對(duì)象形式放回,否則,將默認(rèn)值以對(duì)象形式放回
例如,當(dāng)我們的請(qǐng)求是http://localhost:8080/webapi/myresource/pojo?age=26&name=waylau
則返回
{
"age": 26,
"name": "waylau"
}
當(dāng)我們的請(qǐng)求是http://localhost:8080/webapi/myresource/pojo
則返回默認(rèn)值
{
"age": 21,
"name": "www.waylau.com"
}
@FormParam 顧名思義是處理 HTML表單請(qǐng)求的。要求所請(qǐng)求 MIME 媒體類型為 application/x-www-form-urlencoded
,并且符合指定的 HTML 編碼的形式,此參數(shù)提取對(duì)于 HTML 表單 POST 請(qǐng)求是非常有用的。比如,我們要處理一個(gè)登陸表單,處理如下:
@POST
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Produces(MediaType.APPLICATION_JSON)
public Response login(@FormParam("username") String username,
@FormParam("password") String password) {
//業(yè)務(wù)邏輯省略...
return null;
}
其他的參數(shù)注解還包括
見(jiàn) parameter-annotations
。
更多建議: