【问题标题】:rest service url not working (404) -Glassfish休息服务网址不起作用(404)-Glassfish
【发布时间】:2015-10-22 20:25:34
【问题描述】:

我基于一些示例创建了一个简单的 RESTful Web 服务并将其构建到一个 .war 文件中(项目结构在 WEB-INF 下有 web.xml),将其部署在 glassfish 上,当我尝试时出现 404 not found 错误调用它。 我包含该服务的课程是:

    import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;

/**
 * Created by Nikos Kritikos on 10/22/2015.
 */

@Path("/decks")
public class HS_Services {

    @Path("sayHello/{name}")
    @GET
    public String doSayHello(@PathParam("name") String name) {
        return "Hello there "+name;
    }

}

我的 web.xml 是这样的:

<servlet>
    <servlet-name>HSRestServices</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <load-on-startup>1</load-on-startup>

</servlet>
<servlet-mapping>
    <servlet-name>HSRestServices</servlet-name>
    <url-pattern>/hsrest/*</url-pattern>
</servlet-mapping>

我尝试用http://localhost:8080/HSRestServices/hsrest/decks/sayHello/Nikos 调用它,但我从 glassfish 得到 404.. 任何帮助将不胜感激,谢谢。

【问题讨论】:

  • 为什么在 URL 中使用 /HSRestServices?
  • @Controller 添加到您的 HS_Services 类中,告诉 Spring 是 Web 控制器
  • 因为 HSRestServices 是 servlet 的名称,也是 web 应用程序的名称。我测试了localhost:8080/hsrest/decks/sayHello/Nikos,没有工作
  • Valijon,我不用spring,为什么需要这个?

标签: java rest glassfish


【解决方案1】:

您缺少init-param,您在其中指定应扫描哪些包以查找 REST 端点类。

将您的 web.xml 更改为如下所示:

<servlet>
        <servlet-name>HSRestServices</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>jersey.config.server.provider.packages</param-name>
            <param-value>insert.packagename.where.your.class.is.here</param-value>
        </init-param>
</servlet>

确保插入包含您的类的包的名称。

你不需要 Spring。

还有另一种不使用web.xml 的方法。详情请看this question

【讨论】:

    猜你喜欢
    • 2017-02-09
    • 2014-11-18
    • 1970-01-01
    • 2013-07-05
    • 2013-05-08
    • 2014-08-10
    • 2013-11-29
    • 1970-01-01
    • 2013-03-25
    相关资源
    最近更新 更多