感謝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 .
回覆刪除