我正在尝试在我的机器上运行一个简单的“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-rest
是Eclipse项目的名称,以及GlassFish管理页面建议的根路径。
答案 0 :(得分:4)
您的代码似乎没问题,所以最有可能的问题是您没有为您的服务定义基本网址。您需要告诉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
答案 1 :(得分:-1)
@GET
@Produces("application/xml")
@path("/getxml")
public String getXml() {
// TODO return proper representation object
return "<greeting>Hello REST</greeting>";
}
Your url should be http://localhost:8080/hello-rest/hello/getxml
您应该在方法级别提及路径,因此请求会重定向到适当的方法。
资源为&#39; hello-rest / hello / getxml&#39;
如果你遇到同样的问题。请在tomcat控制台中附加更多日志/例外。