java - 在 GlassFish 4.0 上部署简单的 REST 示例

标签 java eclipse rest glassfish

我正在尝试采用我在网上找到的一个简单的 REST 示例并将其部署到 GlassFish 4.0。我正在使用 Eclipse(OEPE 发行版)和 GlassFish 4.0。当我尝试“运行方式 --> 在服务器上运行”时,REST 示例似乎已部署,但当它尝试访问我的上下文根 (http 时,我立即在 Eclipse 中收到 HTTP 状态 404 - 未找到错误//localhost:8080/RESTFullWS/)。

根据我所阅读的内容,一切似乎都已就位,但我仍然无法从浏览器访问上下文根或我的服务端点。我想我在这里遗漏了一些明显的东西,但不确定发生了什么。

服务:

package com.example.rest;

@Path("UserInfoService")
public class UserInfo 
{
@GET
    @Path("/name/{i}")
@Produces(MediaType.TEXT_XML)

public String userName(@PathParam("i") String i) 
{
   String name = i;
   return "<User>" + "<Name>" + name + "</Name>" + "</User>";
}

@GET 
@Path("/age/{j}") 
@Produces(MediaType.TEXT_XML)
public String userAge(@PathParam("j") int j) 
{
   int age = j;
   return "<User>" + "<Age>" + age + "</Age>" + "</User>";
}
 }

在 glassfish-web.xml 中定义的 Web 上下文:

<glassfish-web-app>
    <context-root>/RESTFullWS</context-root>
</glassfish-web-app>

http://localhost:8080/RESTFullWS/UserInfoService/name/bob  -- gets me the 404.

我的服务部署是否正确?我该如何测试?

最佳答案

主要问题是您选择了一个针对 Tomcat 的教程,它只是一个 servlet 容器,而不是像 GlassFish 那样的完整 Java EE 应用服务器.

GlassFish 4 集成了 Jersey 2.x(这是提供 REST 内容的 JAX-RS 实现)。本教程建议使用 Jersey 1.x 并打包使用 Tomcat 时需要的 Jersey 库,因为 Tomcat 不附带所需的库(对于 JPA、JSF 等其他 Java EE 技术也是如此)。

但解决方案应该很简单。

正如您在评论中发布的那样,您没有 web.xml,这没关系,您的情况不需要它。

您需要一个类来代表您的 REST 应用程序并加载端点类。它应该类似于:

import java.util.HashSet;
import java.util.Set;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;

@ApplicationPath("/rest")
public class MyApplication extends Application {
    @Override
    public Set<Class<?>> getClasses() {
        final Set<Class<?>> classes = new HashSet<Class<?>>();
        classes.add(UserInfo.class);
        return classes;
    }
}

如您所见,UserInfo 类已添加到类列表中。如果您创建了其他端点类,请在此处添加此类。

注释 javax.ws.rs.core.Application 设置 REST 端点的根,并添加在主 context-root 之后。 URL 应如下所示:

http://localhost:8080/RESTFullWS/rest/UserInfoService/name/bob

这应该足够了。从 WEB-INF/lib 文件夹中删除所有 库,因为 GlassFish 包含示例所需的所有内容。如果您需要一个用于导入的库,那么依赖 javaee-api 包就足够了,您不需要将其与应用程序打包在一起。如果您使用 Maven,您的 pom.xml 中应该有这样的条目:

    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-api</artifactId>
        <version>7.0</version>
        <scope>provided</scope>
    </dependency>

另请参阅:

关于java - 在 GlassFish 4.0 上部署简单的 REST 示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23614238/

相关文章:

javascript - 可以在没有 REST API 的情况下使用 AngularJS 吗?

java - 我们可以在jsp中实现一个接口(interface)吗?

java - 决定使用 Comparable 或 Comparator

java - 为什么 Maven 不显示 Lenskin 伪影?

java - 配置失败 : @AfterClass teardown error in appium

c# - 在 web api 和 odata 中处理大型数据集

c# - Azure 管理 API - 创建 VMImage - InvalidXmlRequest - 请求正文 XML 无效或未正确指定

java - JDK7编译错误: Ambiguity reference

java - 如何使用 Java 正则表达式防止字符重复

java - 在包 'layout_alignParentEnd' Activity_post.xml/DispatchActivity/res/layout 第 23 行中找不到属性 'android' 的资源标识符