codecamp

REST 自定义资源配置

观察 web.xml

之前的 web.xml 配置是这样的:

<web-app version="2.5" 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_2_5.xsd">
    <servlet>
        <servlet-name>Jersey Web Application</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>jersey.config.server.provider.packages</param-name>
            <param-value>com.waylau.rest</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Jersey Web Application</servlet-name>
        <url-pattern>/webapi/*</url-pattern>
    </servlet-mapping>
</web-app>

其中

<init-param>
    <param-name>jersey.config.server.provider.packages</param-name>
    <param-value>com.waylau.rest</param-value>
</init-param>

这段说的是,如果配置属性无需设置,要部署应用程序只包括存储在特定的包的资源和提供者,那么你可以指示 Jersey 自动扫描这些包,这样就能自动注册找到的任何资源和提供者,这样就能找到了com.waylau.rest包下的 MyResource 资源并且注册。

自定义配置

当需要更多的配置,上述方法显然不能满足。可以重写 Application 类。

package com.waylau.rest;

import org.glassfish.jersey.server.ResourceConfig;

/**
 * REST 主应用
 * 
 * @author waylau.com
 * 2015年3月3日
 */
public class RestApplication extends ResourceConfig {

    public RestApplication() {
        //资源类所在的包路径  
        packages("com.waylau.rest"); 
    }
}

为了规范,我们在建立 com.waylau.rest.resource 包,用来专门放资源来。接着把我们的资源 MyResource 移到该包下面。

public class RestApplication extends ResourceConfig {

    public RestApplication() {
        //资源类所在的包路径  
        packages("com.waylau.rest.resource"); 
    }
}

最终,RestApplication 在 web.xml 配置是这样的:

<init-param>
    <param-name>javax.ws.rs.Application</param-name>
    <param-value>com.waylau.rest.RestApplication</param-value>
</init-param>

运行测试

启动项目,访问 http://localhost:8080/,点击“Jersey resource”,显示“Got it!”,说明配置成功。

源码

custom-resourceconfig 项目


REST 快速开发
REST 处理 JSON 和 XML
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }