感謝Owen血尿付出。
第一步:安裝Eclipse跟Tomcat 6.0.32
第二步:下載Jersey Library 1.6。官網http://jersey.java.net/
第三步:將下載的.jar檔放到Tomcat/lib
核心的lib asm-3.1.jar, jersey-core.jar, jersey-server.jar, jsr-311-api-1.0.jar
第四步:開啟Eclipse,新建一個Dynamic Web Project
第五步:修改專案內的YourProjectName/WebContent/WEB-INF/web.xml,新增以下內容
<servlet> <servlet-name>JerseyServlet</servlet-name> <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>JerseyServlet</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping>第六步:第一個HelloWorld Restful API (支援GET / POST)
package stut.csie.sample; import java.io.IOException; import java.io.InputStream; import javax.ws.rs.GET; import javax.ws.rs.POST; 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.MediaType; import org.codehaus.jettison.json.JSONException; import org.codehaus.jettison.json.JSONObject; @Path("/helloWorld") public class HelloWorld { @GET @Produces(MediaType.TEXT_PLAIN) public String getHelloWorld() { String response = "Hello World :)"; return response; } @POST @Produces(MediaType.APPLICATION_JSON) public String postHelloWorld(InputStream requestBodyStream) { JSONObject json = new JSONObject(); try { json.put("requestbody", this.convertRequestBODY2String(requestBodyStream)); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } return json.toString(); } @GET @Path("/{getparameter}") @Produces(MediaType.APPLICATION_JSON) public String getByPathParameterAndQueryPath( @PathParam(value="getparameter") String getparameter, @QueryParam(value="q") String q) throws JSONException { System.out.println(getparameter); System.out.println(q); JSONObject json = new JSONObject(); json.put("pathParameter", getparameter); json.put("q", q); return json.toString(); } //convert request inputstream to string private String convertRequestBODY2String(InputStream requestBodyStream){ StringBuffer buffer = new StringBuffer(); int bufferContent = 0; do { try { bufferContent = requestBodyStream.read(); System.out.println(bufferContent); if(bufferContent > 0) buffer.append((char) bufferContent); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }while(bufferContent > 0 ); return buffer.toString(); } }
第七步:測試你的RESTFul API
方法一:取得get方法帶入的QueryString
GET:http://hostname:port/webname/services/helloWorld/mytest
output: mytest
方法二:呼叫get
GET:http://hostname:port/webname/services/helloWorld
output:
HelloWorld
方法三:呼叫post
POST:http://hostname:port/webname/services/helloWorld
RequestBody:
helloword
output:
{"requestbody":"helloword"}
service:為web.xml所定義的url rewrite pattern
helloWrold:為你定義的@Path參數
補充說明:
1.每個api內的method,如果都加上@Path參數後,就可以在往下切階層了
@POST @Path("/post") @Produces(MediaType.APPLICATION_JSON) public String postHelloWorld(InputStream requestBodyStream) { ... }
呼叫方法
http://hostname:port/webname/services/helloWorld/post
2.Jersey 參數使用說明
Annotation | Description |
---|---|
@PATH(your_path) | Sets the path to base URL + /your_path. The base URL is based on your application name, the servlet and the URL pattern from the web.xml" configuration file. |
@POST | Indicates that the following method will answer to a HTTP POST request |
@GET | Indicates that the following method will answer to a HTTP GET request |
@PUT | Indicates that the following method will answer to a HTTP PUT request |
@DELETE | Indicates that the following method will answer to a HTTP DELETE request |
@Produces( MediaType.TEXT_PLAIN [, more-types ] ) | @Produces defines which MIME type is delivered by a method annotated with @GET. In the example text ("text/plain" ) is produced. Other examples would be "application/xml" or "application/json". |
@Consumes( type [, more-types ] ) | @Consumes defines which MIME type is consumed by this method. |
@PathParam | Used to inject values from the URL into a method parameter. This way you inject for example the ID of a resource into the method to get the correct object. |
Reference:
三步轻松实现java restful web services
用 Java 技术创建 RESTful Web 服务
Overview of JAX-RS 1.0 Features
REST with Java (JAX-RS) using Jersey - Tutorial
Handling multiparts in Restful applications using Jersey(進階)
作者您好
回覆刪除請問在getByPathParameterAndQueryPath中
"q"參數如何傳入,或是要傳入第二個參數如何做
謝謝
@Path("/{getparameter}/{getparameter2}")
刪除@PathParam(value="getparameter2") String getparameter2,
Well explained ,there is also one more good resource for restful webservice in java visit jersey tutorial with examples .
回覆刪除