构建Restful Web服务-jersey

87214156 2014-11-14

1:准备环境
jdk,Eclipse,tomcat,jersey类库

jersey相关jar
核心服务器:jersey-core.jar,jersey-server.jar,jsr311-api.jar,asm.jar
核心客户端:(用于测试)jersey-client.jar
JAXB 支持:(在高级样例中使用)jaxb-impl.jar,jaxb-api.jar,activation.jar,stax-api.jar,wstx-asl.jar
JSON 支持:(在高级样例中使用)jersey-json.jar

2:搭建Jersey容器
在应用程序的 web.xml 文件中定义 servlet 调度程序
除了声明 Jersey servlet 外,
它还定义一个初始化参数,指向资源接口的路径。com.sun.jersey.config.property.packages

 <servlet>
  <servlet-name>JerseyServletName</servlet-name>
  <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
  <init-param>
   <param-name>com.sun.jersey.config.property.packages</param-name>
   <param-value>com.saving.platform.osd.rest</param-value>
  </init-param>
  <init-param>
   <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
   <param-value>true</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
 </servlet>
 
 <servlet-mapping>
  <servlet-name>JerseyServletName</servlet-name>
  <url-pattern>/rest/*</url-pattern>
 </servlet-mapping>
 
3:在执行的资源接口路径下,编写一个API接口资源
编写一个名为 HelloResource 的资源,它接受 HTTP GET 并响应 “Hello Jersey”。

@Path("/test")
public class HelloResource {
 public TestApi() {
 }

 @PermitAll
 @Path("/say_hello/{param}")
 @GET
 @Produces("application/json")
 public Response sayHello(@PathParam("param") String param) {
  return Response.status(200).entity("Hello Jersey!").build();
 }
}

知识点:

(1):资源类(Resource Class):注意,资源类是一个简单的 Java 对象 (POJO),可以实现任何接口。这增加了许多好处,比如可重用性和简单。
(2):注释(Annotation):在 javax.ws.rs.* 中定义,是 JAX-RS (JSR 311) 规范的一部分。
(3):资源类相对路径设置:@Path("/test")注意这个路径是唯一的,不能与其他API的相对路径重复。
(4):方法相对路径设置:@Path("/say_hello")与根路径 “/test” 结合形成子资源的 URI。
(5):@GET:这意味着以下方法可以响应 HTTP GET 方法。
(6)@Produces:以纯文本方式定义响应内容 MIME 类型。
(7)@PathParam("param") 该注释将参数注入方法参数的路径

4:测试API
打开您的浏览器并输入 URL http://<host>:<port>/<appctx>/rest/test/say_hello/hello
您将看到响应 “Hello Jersey!”。


遇到的问题:
com.sun.jersey.api.container.ContainerException: The ResourceConfig instance does not contain any root resource classes. 
原因是:应用不包含任何resource api,写一个api就不会报这个错误信息了。

相关推荐