当前位置: 首页 > 面试题库 >

JAX-RS,GlassFish,Eclipse。简单的Web服务不起作用

常雅珺
2023-03-14
问题内容

我试图在我的机器上运行一个简单的“ Hello World” RESTful Web服务。我使用Eclipse Kepler和GlassFish
4.0。我能够部署该服务,并且可以在GlassFish的管理页面上看到该服务,但是当我尝试访问该服务时,出现以下错误:“ HTTP状态404-找不到”。

以下是简单服务的代码:

import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.UriInfo;

@Path("hello")
public class HelloRest {
    @SuppressWarnings("unused")
    @Context
    private UriInfo context;

    /**
     * Default constructor. 
     */
    public HelloRest() {
        // TODO Auto-generated constructor stub
    }

    /**
     * Retrieves representation of an instance of HelloRest
     * @return an instance of String
     */
    @GET
    @Produces("application/xml")
    public String getXml() {
        // TODO return proper representation object
        return "<greeting>Hello REST</greeting>";
    }

    /**
     * PUT method for updating or creating an instance of HelloRest
     * @param content representation for the resource
     * @return an HTTP response with content of the updated or created resource.
     */
    @PUT
    @Consumes("application/xml")
    public void putXml(String content) {
    }

}

为了访问该服务,我尝试以下URL:,http://127.0.0.1:8080/hello-rest/hello其中hello- restEclipse项目的名称和GlassFish管理页面建议的根路径。


问题答案:

您的代码似乎还可以,因此问题很可能是您尚未定义服务的基本URL。您需要告诉JAX-
RS(Jersey是GlassFish的实现),它必须将哪个URL模式作为端点(基本URL)进行拦截。

实现此目的的一种方法是使用应用程序类,该类可以添加到项目中的任何程序包中(您也可以在web.xml文件中定义必要的内容,我不会介绍)。以下是代码:

import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;

@ApplicationPath("your-base-url")
public class ApplicationConfig extends Application {

}

您可以使用@ApplicationPath批注定义基本URL。然后,您可以在以下位置访问服务http://127.0.0.1:8080/hello- rest/your-base-url/hello



 类似资料:
  • 你好,我曾与JAX-WS合作开发基于SOAP的网络服务。现在我想使用REST,因为正如我从这里学习的那样,REST比SOAP有优势。 但从不同的文章中,我知道我们也可以从JAX-WS创建RESTful Web服务。但是大多数人说我们应该使用JAX-RS而不是JAX-WS。 我的问题是JAX-WS RESTful webservice和JAX-RS(泽西)之间有什么区别。JAX-RS相对于JAX-W

  • 我尝试构建一个带有Rest服务和EJB注入的Java EE7应用程序。我创建了一个多模块maven项目,并将其部署在Glassfish 4上。我最后一个EAR包含一个带有EJB的JAR,例如,带有我的Rest服务定义: 当我部署我的应用程序时,我看到下面的日志似乎还可以。即使我想知道它为什么定义“java:global”JNDI,因为默认情况下@Stateless EJB是@local: 编辑1:

  • 我试图在JBoss AS 7.1下部署一个简单的web应用程序,该应用程序与Resteasy捆绑在一起。根据文档,只需要(至少)一个空的、一个带有注释的和其他类的的类 下面是我所遵循的文档: https://docs.jboss.org/author/display/as7/jax-rs+reference+guide https://docs.jboss.org/author/display/a

  • 问题内容: 我用两个资源创建了一个简单的REST服务。第一个资源很好用,只返回MediaType.TEXT_PLAIN。 对于第二个资源,我想尝试将POJO映射到Java并遵循以下示例: https://github.com/jersey/jersey/tree/2.3.1/examples/json- moxy/src/main/java/org/glassfish/jersey/example

  • 我用两个资源创建了一个简单的REST服务。第一个资源工作得很好,只返回MediaType。纯文本。 对于第二个资源,我想尝试将POJO映射到Java,并遵循以下示例: https://github.com/jersey/jersey/tree/2.3.1/examples/json-moxy/src/main/java/org/glassfish/jersey/examples/jsonmoxy

  • 问题内容: 我正在尝试向一些Web服务调用中添加一些响应标头。我使用CXF 2.1.2和JAX- RS编写了Web服务。我需要返回一个对象,我还想向Response添加一些标头。 在不返回javax.ws.rs.core.Response对象的情况下 ,如何在响应中添加标头并仍然返回javabean? 问题答案: 您可以通过Web服务中的@Context注释注入对实际HttpServletResp