目的和綜述
1. 實(shí)現(xiàn)JAX-RS API規(guī)范锭部,提供固定周期的發(fā)布;
2. 提供擴(kuò)展Api提供自定義的開發(fā)功能;
3. 更簡單的使用java開發(fā)RESFull應(yīng)用
僅僅core-common and core-client可以使用java6牵署,其他模塊需要使用java7
使用maven創(chuàng)建
創(chuàng)建一個(gè)直接執(zhí)行的空工程
mvn archetype:generate -DarchetypeArtifactId=jersey-quickstart-grizzly2 -DarchetypeGroupId=org.glassfish.jersey.archetypes -DinteractiveMode=false -DgroupId=com.example -DartifactId=simple-service -Dpackage=com.example -DarchetypeVersion=2.24
創(chuàng)建一個(gè)可以打包為war的空工程mvn clean package
mvn archetype:generate -DarchetypeArtifactId=jersey-heroku-webapp -DarchetypeGroupId=org.glassfish.jersey.archetypes -DinteractiveMode=false -DgroupId=com.example -DartifactId=simple-heroku-webapp -Dpackage=com.example -DarchetypeVersion=2.24
jersey 范例
https://github.com/jersey/jersey/tree/2.24/examples
配置資源
-
@Path 配置資源的相對(duì)路徑,路徑前后無所謂有沒有‘/’
- @Path("/users")
- @Path("/users/{username}") 傳入?yún)?shù)
- @Path("users/{username: [a-zA-Z][a-zA-Z_0-9]*}") 限制參數(shù)路徑格式
-
@GET, @PUT, @POST, @DELETE, @HEAD, ... (HTTP Methods)
- 默認(rèn)支持HEAD,OPTIONS請(qǐng)求
- HEAD請(qǐng)求會(huì)忽略返回的結(jié)果
- OPTIONS 方法可以根據(jù)請(qǐng)求頭的Accept字段返回對(duì)應(yīng)結(jié)果
-
@Produces設(shè)置請(qǐng)求返回的MIME類型
- 放在類上篱蝇,代表本類默認(rèn)沒有@Produces類型的都使用默認(rèn)類型
- 范例@Produces("text/html")辫诅, @Produces({"application/xml", "application/json"});
- @Consumes 可接受的類型
-
@*Param 參數(shù)注解
-
@QueryParam 從Url請(qǐng)求上請(qǐng)求的參數(shù)
@Path("smooth") @GET public Response smooth( @DefaultValue("2") @QueryParam("step") int step, @DefaultValue("true") @QueryParam("max-m") boolean hasMax, @DefaultValue("red") @QueryParam("last-color") ColorParam lastColor) { ... }
- 參數(shù)類型要求
- 為基礎(chǔ)類型佩抹;
- 有一個(gè)參數(shù)類型為String構(gòu)造函數(shù);
- 有一個(gè)Strig參數(shù)的靜態(tài)方法取董,名稱為valueOf棍苹、fromString;
- 實(shí)現(xiàn)接口javax.ws.rs.ext.ParamConverterProvider;
- 類型為List<T>, Set<T> or SortedSet<T>, 且T類型滿足第2茵汰、3條枢里;
- 參數(shù)類型要求
The @PathParam and the other parameter-based annotations, @MatrixParam, @HeaderParam, @CookieParam, @FormParam obey the same rules as @QueryParam. @MatrixParam extracts information from URL path segments. @HeaderParam extracts information from the HTTP headers. @CookieParam extracts information from the cookies declared in cookie related HTTP headers.
-
@FormParam 從MIME類型為 "application/x-www-form-urlencoded"的請(qǐng)求中提取參數(shù)。
@POST @Consumes("application/x-www-form-urlencoded") public void post(@FormParam("name") String name) { // Store the message }
-
@BeanParam 將所有參數(shù)轉(zhuǎn)換成一個(gè)Bean
public class MyBeanParam { @PathParam("p") private String pathParam; @MatrixParam("m") @Encoded @DefaultValue("default") private String matrixParam; @HeaderParam("header") private String headerParam; private String queryParam; public MyBeanParam(@QueryParam("q") String queryParam) { this.queryParam = queryParam; } public String getPathParam() { return pathParam; } ... } @POST public void post(@BeanParam MyBeanParam beanParam, String entity) { final String pathParam = beanParam.getPathParam(); // contains injected path parameter "p" ... }
可以使用@Context注入HttpHeaders, Request, UriInfo, SecurityContext.
-
獲取所有參數(shù)
~~~
@GET
public String get(@Context UriInfo ui) {
MultivaluedMap<String, String> queryParams = ui.getQueryParameters();
MultivaluedMap<String, String> pathParams = ui.getPathParameters();
}
@GET
public String get(@Context HttpHeaders hh) {
MultivaluedMap<String, String> headerParams = hh.getRequestHeaders();
Map<String, Cookie> pathParams = hh.getCookies();
}
@POST
@Consumes("application/x-www-form-urlencoded")
public void post(MultivaluedMap<String, String> formParams) {
// Store the message
}
~~~
子資源
@Path("/item")
public class ItemResource {
@Context UriInfo uriInfo;
@Path("content")
public ItemContentResource getItemContentResource() {
return new ItemContentResource();
}
@GET
@Produces("application/xml")
public Item get() { ... }
}
}
public class ItemContentResource {
@GET
public Response get() { ... }
@PUT
@Path("{version}")
public void put(@PathParam("version") int version,
@Context HttpHeaders headers,
byte[] in) {
...
}
}
默認(rèn)資源類都是prototype,當(dāng)使用@Singleton時(shí)可以控制為案例
資源文件定義可以通過繼承Application實(shí)現(xiàn)
* ResourceConfig默認(rèn)實(shí)現(xiàn)