1、配置pom.xml
<dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-servlet</artifactId> <version>1.19.1</version> </dependency>
2、配置web.xml
<filter> <filter-name>allresource</filter-name> <filter-class>com.sun.jersey.spi.container.servlet.ServletContainer</filter-class> </filter> <filter-mapping> <filter-name>allresource</filter-name> <url-pattern>/imports/*</url-pattern> </filter-mapping>
3、配置filter的具体参数
<filter> <filter-name>allresource</filter-name> <filter-class>com.sun.jersey.spi.container.servlet.ServletContainer</filter-class> <init-param> <param-name>com.sun.jersey.config.property.packages</param-name> <param-value>my.test.xml.modeldesigner.resources;my.test.xml.modeldesigner.resources2</param-value> </init-param> <init-param> <param-name>com.sun.jersey.spi.container.ContainerRequestFilters</param-name> <param-value>my.test.xml.modeldesigner.resourcespre.ResourcesPre;my.test.xml.modeldesigner.resourcespre.ResourcesPre2</param-value> </init-param> <init-param> <param-name>com.sun.jersey.spi.container.ContainerResponseFilters</param-name> <param-value>my.test.xml.modeldesigner.resourcespost.ResourcesPost;my.test.xml.modeldesigner.resourcespost.ResourcesPost2</param-value> </init-param> <init-param> <param-name>com.sun.jersey.config.feature.FilterForwardOn404</param-name> <param-value>false</param-value> </init-param> <init-param> <param-name>com.sun.jersey.config.feature.CanonicalizeURIPath</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>com.sun.jersey.config.feature.NormalizeURI</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>com.sun.jersey.config.feature.Redirect</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>allresource</filter-name> <url-pattern>/imports/*</url-pattern> <url-pattern>/a/*</url-pattern> </filter-mapping>
root resources指定在类的上面有@path注解的类
这些初始化参数都是在下面这几个包里面定义的
com.sun.jersey.api.core.ResourceConfig
com.sun.jersey.api.core.PackagesResourceConfig
com.sun.jersey.spi.container.servlet.ServletContainer
com.sun.jersey.spi.container.ContainerResponseFilter
3.1 com.sun.jersey.config.property.packages
这个是扫描包的配置,会递归搜索指定包下的root resources,如果要指定多个包可以用分号隔开(可选配置)。
3.2 com.sun.jersey.spi.container.ContainerRequestFilters
这个是对request进行处理的,再进入root resources之前处理request
3.3 com.sun.jersey.spi.container.ContainerResponseFilters
这个是对response进行处理的,再root resources处理完之后再对response进行处理
例1:增加response的响应头
import com.sun.jersey.spi.container.ContainerRequest; import com.sun.jersey.spi.container.ContainerResponse; import com.sun.jersey.spi.container.ContainerResponseFilter; import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.ResponseBuilder; public class ResourcesPost3 implements ContainerResponseFilter { public ResourcesPost3() { } public ContainerResponse filter(ContainerRequest containerRequest, ContainerResponse containerResponse) { ResponseBuilder response = Response.fromResponse(containerResponse.getResponse()); response.header("Access-Control-Allow-Origin", "*").header("Access-Control-Allow-Methods", "GET, PUT, OPTIONS"); containerResponse.setResponse(response.build()); return containerResponse; } }
例2:自动生成restdoc文档和restdoc API接口
<dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-servlet</artifactId> <version>1.19.1</version> </dependency> <dependency> <groupId>org.restdoc</groupId> <artifactId>restdoc-server-jersey</artifactId> <version>1.0.1</version> </dependency>
import org.restdoc.jersey.server.RestDocFeature; import my.test.xml.modeldesigner.resources.MainResources; public class ResourcesPost4 extends RestDocFeature { public ResourcesPost4() { } protected Class<?>[] getClasses() { Class<?>[] res = new Class[] { MainResources.class }; // 这个class是指定义了root resources的class return res; } }
3.4 com.sun.jersey.config.feature.FilterForwardOn404
如果为true,并且从运行时或应用程序返回404响应且没有实体主体,则运行时将请求转发到过滤器链中的下一个过滤器。通俗一点就是在找不到路径的情况下是否继续走后面的过滤器,主要是指几个filter之间的关系
3.5 com.sun.jersey.config.feature.Redirect
和状态吗307有关系,如果为真,并且FEATURE_CANONICALIZE_URI_PATH为真,并且请求URI上的canonicalization/normalization操作导致新的URI不等于请求URI,那么客户机(临时)被重定向到新的URI。
如果为真,@PATH的值以'/'结尾,请求URI路径没有以‘/’结尾,那么客户端(暂时)重定向到一个新的URI请求这个URI是以' / '结尾的;但是如果@path的值不以’/‘结尾,而请求URL路径以’/‘结尾,这样子是请求不到的。总之,就是说如果@path以’/‘结尾,请求的URL是可以忽略末尾的斜杠的,否则是不可以的。
3.6 com.sun.jersey.config.feature.CanonicalizeURIPath
如果为真,请求URI路径组件将通过删除连续斜杠(即所有/+将被/替换)规范化。如果不为真,请求URI路径组件将被mot修改。
3.7 com.sun.jersey.config.feature.NormalizeURI
如果true和FEATURE_CANONICALIZE_URI_PATH为真,则请求URI将按照URI.normalize()指定的方式进行规范化。如果不为真,则不修改请求URI。如果未true,会去掉URI中的'.'和部分'..'
总之,3.5只是表像,3.6和3.7才是真正的起作用的,也就是说有3.6和3.7没有3.5也是可以的,但有个3.5会显得更加规范化。
3.8 com.sun.jersey.api.json.POJOMappingFeature
这个配置是定义在jersey-json包下面的,需要引入jersey-json.jar,这里用的是jackson1
<dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-json</artifactId> <version>1.19.1</version> </dependency>
如果用jackson2是不需要这个init-param参数的,只需要引入包:
<dependency> <groupId>com.fasterxml.jackson.jaxrs</groupId> <artifactId>jackson-jaxrs-json-provider</artifactId> <version>2.2.3</version> </dependency>