In the first RESTEasy tutorial we have learnt the basics about REST Web services and we have tested a simple RESTful Web service. In this tutorial we will show how to inject web application elements (form parameters, query parameters and more) into a RESTful Web service.
You can use the following annotations to bind HTTP requests to a RESTful web service:
@FormParam
@PathParam
@QueryParam
@HeaderParam
@CookieParam
@MatrixParam
Let's explore all the possible interactions.
Here we are submitting a POST request containing two parameters email and password which are translated into the parameters "e" and "p" of the login method.
Here's the full example:
@Path("/")
public class LoginService
{
@Path("login")
@POST
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;
}
The @PathParam annotation binds the value of a path segment to a resource method parameter. For example, the following method would intercept an HTTP GET like http://server:port/login/12345 and convert the PathParam "12345" into the String "id"
@Path("/")
public class LoginService
{
@GET
@Path("login/{zip}")
public String login(@PathParam("zip") String id) {
return "Id is " +id;
}
}
As for @FormParam, you can embed the @PathParam declaration at class level, if you prefer.
The @QueryParam annotation binds the value of a path segment to a resource method parameter. For example, the following method would intercept an HTTP GET like http://server:port/login?zip=12345 and inject the query parameter "zip" into the method parameter "zip"
@Path("/")
public class LoginService
{
@GET
@Path("login/{zip}")
public String login(@QueryParam("zip") String zip) {
return "Id is " +id;
}
}
@GET
@Path("login/{zip}")
public String login(@DefaultValue("11111") @QueryParam("zip") String zip) {
return "Id is " +id;
}
As for @FormParam, you can embed the @PathParam declaration at class level, if you prefer.
The @HeaderParam annotation extracts information from the HTTP header and binds it to a method parameter. Example:
@GET
public String callService(@HeaderParam("User-Agent") String whichBrowser) {
...
}
The @CookieParam annotation reads an information stored as a cookie and binds it to a method parameter. Example:
@GET
public String callService(@CookieParam("sessionid") String sessionid) {
...
}
The @MatrixParam annotation can be used to bind an expression containing several property=value to a method parameter. For example, supposing you were to invoke an URL like http://server:port/login;name=francesco;surname=marchioni
@GET
public String callService(@MatrixParam("name") String name,
@MatrixParam("surname") String surname) {
...
}
另外:
http://www.soapui.org/REST-Testing/understanding-rest-parameters.html
http://docs.oracle.com/cd/E19226-01/820-7627/6nisfjmk8/index.html