[API Server] JAX-RS 使用 Jersey 2.1.7 架設筆記

使用Jersey 建立Restful Server

架設環境如下
Java 6
Tomcat 7
(Tomcat 5 版會有問題,暫不處理)
Maven
Jersey 2.17


1. 設定pom.xml
    <dependency>
      <groupId>org.glassfish.jersey.containers</groupId>
      <artifactId>jersey-container-servlet</artifactId>
      <version>2.17</version>
    </dependency>  
    <dependency>
      <groupId>org.glassfish.jersey.containers</groupId>
      <artifactId>jersey-container-servlet-core</artifactId>
      <version>2.17</version>
    </dependency>

2. 建立API Server所指定到的路徑
package com.example.jaxrs;
import javax.ws.rs.ApplicationPath;
import org.glassfish.jersey.server.ResourceConfig;

@ApplicationPath("API") //所指定的網頁路徑
public class MyApplication extends ResourceConfig {
  public MyApplication() {
    packages("com.example.jaxrs"); //指定搜尋哪個packages
  }
}

3.建立CORSFilter
 為什麼要建立這個呢主要是API SERVER 有可能跟所要存取的主機不同所以可能發生跨域的問題因此需要建立此文件,跨域問題可以GOOGLE CORS

package com.example.jaxrs;
import java.io.IOException;
import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerResponseContext;
import javax.ws.rs.container.ContainerResponseFilter;
import javax.ws.rs.ext.Provider;

@Provider
public class CORSFilter implements ContainerResponseFilter {

    @Override
    public void filter(ContainerRequestContext request,
            ContainerResponseContext response) throws IOException {
        response.getHeaders().add("Access-Control-Allow-Origin", "*");
        response.getHeaders().add("Access-Control-Allow-Headers",
                "origin, content-type, accept, authorization");
        response.getHeaders().add("Access-Control-Allow-Credentials", "true");
        response.getHeaders().add("Access-Control-Allow-Methods",
                "GET, POST, PUT, DELETE, OPTIONS, HEAD");
        
    }
}

4. 撰寫簡單API
package com.example.jaxrs;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;

@Path("/hello") //這邊所指定的是這個Path底下通通來這裡處理
public class HelloRS {

  @GET //   http://localhost:8080/project/API/hello 使用get存取的內容
  public String sayHelloWorld() {
    return "Hello world";
  }

  @GET //   http://localhost:8080/project/API/hello/96 使用get存取的內容
  @Path("/{name}")
  public String sayHello(@PathParam("name") String name) {
    return "Hello, " + name;
  }
}

基本上這樣就可以WORK了剩下的就是把你需要的API內容寫出來
我自己在用的format是
{
 Status:success/error
 Msg:"error msg"
 Data:[
 ]
}
就僅供參考囉。


此外在參數那邊可以設定
  @PathParam("name") String name,  //路徑參數 /API/96
  @QueryParam("name2") String name2, //Query參數 => /API/96?name2=aaaa
  @FormParam("name3") String name3 //Form參數 
但是使用FormParam前面的request就需要From來Send
也可以用firefox在Request header那邊設定Content-Type:application/x-www-form-urlencoded
來佯稱自己是FROM   XD

至於檔案上傳網路上蠻多的,只是我還沒用到就暫時不列出做法哩,不過都不難懂。
比較要注意的是CORS,畢竟我這邊不是使用JSONP(我看格式就不喜歡了OTZ)



留言

這個網誌中的熱門文章

[java]BIG5 字集判斷

[java]半型轉全型

[javascript]當月第一天、當月最後一天