在java应用程序中嵌入泽西

时间:2015-12-30 10:02:00

标签: java rest jersey-2.0

我正在尝试在我的java应用程序中嵌入jersey服务器,以便我可以通过编程方式控制它的启动/停止等。我找到了this教程,但它适用于jetty 1.18.1(相当旧)。使用最新的泽西版本(2.22.1)似乎在类,名称空间等方面有很多变化,上面教程中显示的示例不起作用。

有人可以指出在自定义应用程序中嵌入最后版本的球衣的方法吗?我相信它是可行的,但我似乎无法找到参考,文档,示例或其他......

2 个答案:

答案 0 :(得分:2)

正如Gimby所说,documentation提供了答案。 Jersey可以使用另一个http服务器(例如jetty)嵌入到java应用程序中。在我的例子中,我用这三个步骤构建了一个非常简单的工作示例项目:

  1. 在我的pom.xml中添加了相应的maven依赖项。 请注意我只对maersey项目的jetty连接器有maven依赖。我没有对jetty服务器本身的依赖。两者都会导致错误。

    def function(a):
        _interpolators = {key: (lambda t, k=key: a[k]) for key in a}
    
        def _interpolate(t):
            return {key:f(t) for (key,f) in _interpolators.items()}
        return _interpolate
    
  2. 构建一个简单的REST资源类

    <dependency>
        <groupId>org.glassfish.jersey.core</groupId>
        <artifactId>jersey-server</artifactId>
        <version>2.22.1</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-jetty-http</artifactId>
        <version>2.22.1</version>
    </dependency>
    
  3. 在main函数中添加了启动嵌入式REST服务器的代码

    import javax.ws.rs.GET;
    import javax.ws.rs.Path;
    import javax.ws.rs.PathParam;
    import javax.ws.rs.Produces;
    import javax.ws.rs.core.MediaType;
    
    @Path("testingservice/")
    public class TestingRESTService {
    
        @GET
        @Path("{requestID}")
        @Produces(MediaType.TEXT_PLAIN)
        public String get(@PathParam("requestID") String requestID) {
            return "\n This is request with ID "+requestID;
        }
    }
    

答案 1 :(得分:0)

如果您想将其嵌入到较低级别的API中,以防您选择将网络引擎更改为Netty或Vert.X,则必须转到org.glassfish.jersey.servlet.WebComponent

您需要使用WebConfig构造它,并且您需要创建自己的HttpServletRequest / Response / Context类的实现。

你可以通过建立自己的ApplicationHandler来降低自己,但在那个阶段,它几乎是泽西内幕。在WebComponent级别,您仍然拥有servlet API,因此可以更轻松地构建所需的内容。