jersey1的开发

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>

 

转载于:https://www.cnblogs.com/erdanyang/p/10524239.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值