因为我对jersey不了解,所以首先我先做了一个不用spring的jersey的restful服务,比较简单,建立web工程,使用maven增加jersey的依赖,然后在web.xml里增加jersey的servlet:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<display-name></display-name>
<servlet>
<display-name>JAX-RS REST Servlet</display-name>
<servlet-name>JAX-RS REST Servlet</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>JAX-RS REST Servlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
然后编写了文件,从网上找的例子:
package com.example;
import java.util.HashMap;
import java.util.Map;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Path("myresource")
public class MyResource {
@GET
@Produces(MediaType.APPLICATION_JSON)
public Map getIt() {
HashMap map = new HashMap();
map.put("abc", "def");
return map;
}
}
保存后重启tomcat,报一个没有resource的错误:
com.sun.jersey.api.container.ContainerException: The ResourceConfig instance does not contain any root resource classes.
我看了下tomcat的部署目录,发现classes目录里没有类文件。看来是编译过程出了问题,一般就是类库找不到啊,或是jdk版本等的问题。
用maven把依赖 resolve了一下,看了下,classes目录里面有类了,呵呵,再启动就启动成功了。
后台打印很简单,只有tomcat的东西,启动也很快900多ms。
打开浏览器,输入http://localhost:8080/rest3/services/myresource,报403错误,郁闷!
明明有,为什么不行?
同事说把工程得部署一下,我觉得也没有多大道理,人家即然说了就试试吧,把工程clean了一下,然后重新部署到tomcat中,重启tomcat。
再次打开浏览器,刷新,终于看到结果了,激动啊!
{"abc":"def"}
下一步就是与spring集成了,下一次再写。