本文主要解釋Jersey中各種注解的使用
package com.coshaho.learn.jersey; import java.net.URI; import javax.ws.rs.Consumes; import javax.ws.rs.DefaultValue; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; import javax.ws.rs.core.Context; import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Request; import javax.ws.rs.core.UriBuilder; import javax.ws.rs.core.UriInfo; import org.glassfish.grizzly.http.server.HttpServer; import com.sun.jersey.api.container.grizzly2.GrizzlyServerFactory; import com.sun.jersey.api.core.PackagesResourceConfig; import com.sun.jersey.api.core.ResourceConfig; import com.sun.jersey.spi.resource.Singleton; @Singleton //@Singleton表示單例模式,@PerRequest每個請求對應一個實例,默認為@PerRequest @Path("helloWorld") //服務名稱,緊接port/ public class MyJerseyServer { @Path("{sub_path:[a-zA-Z]*}") //服務子路徑,可以使用正則表達式,表示響應子路徑為任意字母的請求 @GET //表示接受HTTP GET請求,@POST、@PUT和@DELETE同理 @Consumes({MediaType.TEXT_PLAIN, MediaType.APPLICATION_JSON}) //接受請求的媒體類型(MIME),不指定則可以接受任務媒體類型 @Produces(MediaType.TEXT_PLAIN) //定義響應媒體類型(MIME),不指定則可以接受任務媒體類型 public String sayHelloWorld( // 使用路徑定義中的sub_path變量 @PathParam("sub_path") String service, // @QueryParam表示接受請求中的參數,@DefaultValue為默認值 @DefaultValue("coshaho") @QueryParam("name") String name, // @Context可以獲取請求上下文,包括Application,UriInfo,Request,HttpHeaders,SecurityContext @Context Request request, @Context UriInfo uriInfo, @Context HttpHeaders httpHeader ) { System.out.println("Sub path is " + service + "."); System.out.println("Name is " + name + "."); System.out.println("Request method is " + request.getMethod() + ", url is " + uriInfo.getRequestUri().toString() + "."); return "Hello, " + name + ". Service is " + service + "."; } public static void main(String[] args) { URI uri = UriBuilder.fromUri("http://127.0.0.1").port(10000).build(); ResourceConfig rc = new PackagesResourceConfig("com.coshaho.learn.jersey"); try { HttpServer server = GrizzlyServerFactory.createHttpServer(uri, rc); server.start(); } catch (Exception e) { e.printStackTrace(); } try { Thread.sleep(1000*1000); } catch (InterruptedException e) { e.printStackTrace(); } } }
package com.coshaho.learn.jersey; import java.util.Iterator; import javax.ws.rs.core.MultivaluedMap; import com.sun.jersey.api.client.Client; import com.sun.jersey.api.client.ClientResponse; import com.sun.jersey.api.client.WebResource; import com.sun.jersey.api.client.config.ClientConfig; import com.sun.jersey.api.client.config.DefaultClientConfig; public class MyJerseyClient { public static void main(String[] args) { // 創建Jersey Client實例,Client實例很消耗系統資源,需要重用 ClientConfig cc = new DefaultClientConfig(); cc.getProperties().put(ClientConfig.PROPERTY_CONNECT_TIMEOUT, 10*1000); Client client = Client.create(cc); // 創建web資源,是線程安全的,Client實例和WebResource實例可以在多個線程間安全的共享 WebResource resource = client.resource("http://127.0.0.1:10000/helloWorld/sayHi?name=cauchy"); /** * 另一種請求方法 URI uri = UriBuilder.fromUri("http://127.0.0.1/helloWorld/sayHello").port(10000) .queryParam("name", "coshaho").build(); resource = client.resource(uri); */ ClientResponse response = resource.get(ClientResponse.class); // 將HTTP響應打印出來 StringBuilder strBuilder = new StringBuilder(); strBuilder.append("HTTP/1.1 "); strBuilder.append(response.getStatus() + " "); strBuilder.append(response.getStatusInfo()); System.out.println(strBuilder.toString()); System.out.println(); MultivaluedMap<String, String> headers = response.getHeaders(); Iterator<String> iterator = headers.keySet().iterator(); while(iterator.hasNext()) { String headName = iterator.next(); System.out.println(headName + ":" + headers.get(headName)); } System.out.println(); System.out.println(response.getEntity(String.class)); } }
<dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-json</artifactId> <version>1.18</version> </dependency> <dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-server</artifactId> <version>1.18</version> </dependency> <dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-grizzly2</artifactId> <version>1.18</version> </dependency> <dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-client</artifactId> <version>1.18</version> </dependency> <dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-grizzly2</artifactId> <version>1.18</version> </dependency>