WebService學習-04(JAX-RS)
阿新 • • 發佈:2018-11-12
1. JAX-RS = Java API For Restful Web Services
JAX-RS是JAVA EE6 引入的一個新規範。 是一個Java 程式語言的應用程式介面,支援按照表述性狀態轉移(REST)架構風格建立Web
服務。
JAX-RS使用了Java標註來簡化Web服務的客戶端和服務端的開發和部署。
除了JAX-RS方式釋出Restful風格的Webservice
SpringMVC也可以釋出Restful風格的Webservice
JAX-RS提供了一些標註將一個資源類,一個POJO Java類,封裝為Web資源。
包括: @Path,標註資源類或者方法的相對路徑 @GET,@PUT,@POST,@DELETE,標註方法是HTTP請求的型別。 @Produces,標註返回的MIME媒體型別 @Consumes,標註可接受請求的MIME媒體型別 @PathParam,@QueryParam,@HeaderParam,@CookieParam,@MatrixParam,@FormParam,分別標註方法的引數來 自於HTTP請求的不同位置,例如: @PathParam來自於URL的路徑, @QueryParam來自於URL的查詢引數, @HeaderParam來自於HTTP請求的頭資訊, @CookieParam來自於HTTP請求的Cookie。 基於JAX-RS實現的框架有Jersey,RESTEasy等。 這兩個框架建立的應用可以很方便地部署到Servlet 容器中
怎麼用:
1 建工程添jar包(Cxf的jar包)
2 建Customer.java的entity並添加註解@XmlRootElement
3 建CustomerService介面並新增Restful風格相關的註釋
4 編寫CustomerServiceImpl實現類
5 編寫MainServer類,啟動Restful的Webservice
啟動後注意目前用rest而不是soap了,所以沒有WSDL的描述了
6 瀏覽器位址列裡面按照Restful風格的路徑進行訪問+測試
Entity類:
@XmlRootElement public class Customer { public Customer (){ } private String id ; private String name; private Integer age; public Customer(String id, String name, Integer age) { super(); this.id = id; this.name = name; this.age = age; }
Service類:
@Path("/crm")
public class CustomerService {
@GET
@Path("/customer/{id}")
@Produces("application/json")
public Customer getCustomerById(@PathParam("id") String id){
System.out.println("get id:"+id);
Customer res_customer=new Customer(id,"z3",18);
return res_customer;
}
}
服務啟動類:
public class MainServer {
public static void main(String[] args) {
JAXRSServerFactoryBean jAXRSServerFactoryBean = new JAXRSServerFactoryBean();
jAXRSServerFactoryBean.setAddress("http://localhost:8888/restws");
jAXRSServerFactoryBean.setResourceClasses(CustomerServiceImpl.class);
jAXRSServerFactoryBean.create().start();
}
}
客戶端開發步驟:
使用 HttpClient需要以下6個步驟:
1. 建立 HttpClient 的例項
2. 建立某種連線方法的例項
3. 呼叫第一步中建立好的例項的execute方法來執行第二步中建立好的連結類例項
4. 讀response獲取HttpEntity
5. 對得到後的內容進行處理
6. 釋放連線。無論執行方法是否成功,都必須釋放連線
客戶端類:
private static String getCustomer(String id) throws ClientProtocolException, IOException{
CloseableHttpClient httpclient = HttpClientBuilder.create().build();
HttpGet httpget = new HttpGet("http://localhost:8888/restws/crm/customer/1122");
HttpResponse response = httpclient.execute(httpget);
HttpEntity entity = response.getEntity();
if(response.getStatusLine().getStatusCode()==HttpStatus.SC_OK){
String result = EntityUtils.toString(entity, "UTF-8");
System.out.println(result);
}else{
String result = EntityUtils.toString(entity, "UTF-8");
System.err.println(result);
}
EntityUtils.consume(entity);
httpclient.close();
}