在第一RESTEasy教程我们已经学习了基本的Web服务和休息我们已经测试了一个简单的REST风格的Web服务。在本教程中,我们将
显示如何将Web应用程序元素(形式参数,查询参数和更多)为REST风格的Web服务。
你可以使用下面的注释绑定HTTP请求REST风格的Web服务:
@FormParam
@PathParam
@QueryParam
@HeaderParam
@CookieParam
@MatrixParam
让我们探索所有可能的相互作用。
@FormParam
@formparam可以用来注入web表单的参数为REST风格的Web服务。
下面是一个例子:
在这里,我们提交一个后请求包含两个参数的电子邮件和密码
是转化为参数的“E”和“P”的登录方法。
这里是完整的例子:
<form method="POST" action="login">
Email Address: <input type="text" name="email"><br>
Password: <input type="text" name="password">
<input type="submit">
</form>
@Path("/")
public class LoginService
{
@POST
@Path("login")
public String login(@FormParam("email") String e, @FormParam("password") String p) {
return "Logged with " + e + " " + p;
}
}
作为一种替代方法,您可以在类级别上绑定参数电子邮件和密码,如果您需要在不同的其他参数重新使用相同的参数,可以使用它是有用的
服务方法。
public class User {
@FormParam("email")
private String email; @FormParam("password")
private String password;
}
你需要修改相应的方法:
@POST
@Path("login")
public String login(@Form User form) {
return "Logged with " + form.email + " " + form.password;
}
@PathParam
@pathparam标注绑定一个路径段资源的方法参数的值。例如,下面的方法将拦截HTTP GET http://server:port/login/12345
“12345”@pathparam转换为字符串“id”
@Path("/")
public class LoginService
{
@GET
@Path("login/{zip}")
public String login(@PathParam("zip") String id) {
return "Id is " +id;
}
}
作为@formparam,你可以嵌入@pathparam声明在类级别上,如果你喜欢。
@QueryParam
@queryparam 标注绑定一个路径段资源的方法参数的值。例如,下面的方法将拦截HTTP GET http://server:port/login?zip=12345 和
将查询参数 “zip” 注入到方法参数 “zip”
@Path("/")
public class LoginService
{
@GET
@Path("login/{zip}")
public String login(@QueryParam("zip") String zip) {
return "Id is " +id;
}
}
@queryparam可以方便快捷使用defaultValue标注以便你能如果没有查询参数是通过避免空指针异常。
@GET
@Path("login/{zip}")
public String login(@DefaultValue("11111") @QueryParam("zip") String zip) {
return "Id is " +id;
}
作为@formparam,你可以嵌入@pathparam声明在类级别上,如果你喜欢。
@HeaderParam
@headerparam 标注提取 HTTP标头( HTTP header)并将它绑定到一个方法的参数。
例子:
@GET
public String callService(@HeaderParam("User-Agent") String whichBrowser) {
...
}
@CookieParam
@cookieparam注释读取信息存储为一个cookie,并将它绑定到一个方法的参数。例子:
@GET
public String callService(@CookieParam("sessionid") String sessionid) {
...
}
@MatrixParam
@matrixparam注释可以用来绑定包含多个 property (属性)=value(值) 方法参数表达式。例如,假设你要调用一个网址 http://server:port/login?name=francesco&surname=marchioni
@GET
public String callService(@MatrixParam("name") String name,
@MatrixParam("surname") String surname) {
...
}