0

为了学习这项技术,我尝试在家里实现一个简单的 rest web 服务。

我使用最新版本的 JBoss EAP:7。我在 Java 8 下创建了一个 Maven 项目。部署没问题,但是当我想调用我的 REST Web 服务的方法时,出现 404 错误。

我遵循规范和教程的操作。

1)我创建了一个名为bddsorties的 WAR 在 pom 中,我有:

**<plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.4</version>
            <configuration>
                <failOnMissingWebXml>false</failOnMissingWebXml>
                <warName>sortiesbdd</warName>
            </configuration>
</plugin>**

2) 我有一个扩展 javax.ws.rs.core.Application 类的类:public class App extends Application。这个类被注释: @ApplicationPath("/messorties")

@ApplicationPath("/messorties")
public class App extends Application
{
    public static void main( String[] args)
    {
        System.out.println( "Just the Main Class Here!" );
    }
}

3)我有另一个类,我的 Web 服务用 @Path 注释: @Path("accueil")

4)在这个名为 HelloWorld 的 Web 服务类中,有一个我想调用的基本方法,用@Path("helloworld")注释

@Path("accueil")
public class HelloWorld {

    @GET
    @Path("helloworld")
    public Response getHelloWorld() {
        String value = "Hello World Thomas in REST World";
        return Response.status(200).entity(value).build();
    }
}

当我想通过键入http://localhost:8080/sortiesbdd/messorties/accueil/helloworld来调用此方法时,出现 404 错误:错误 HTTP 404

我的代码有什么问题?我正在寻找 2 天,但我找不到解决方案。对我来说,一切似乎都很好,但是,有一个我找不到的错误。

提前谢谢你,托马斯

PS:当我阅读 JBoss 文档时,我有一个 web.xml 文件,但是是空的。

4

3 回答 3

1

通过 App 公开您的资源类,如下所示:

@ApplicationPath("/messorties")
public class App extends Application{

private final Set<Class<?>> classes;

public App(){

 classes = new HashSet<>();
    // add Resources
    classes.add(HelloWorld.class);
}

@Override
public Set<Class<?>> getClasses() {
    return classes;
}

}

还要声明您的所有@path注释,例如 @path("/accueil")

于 2016-11-30T22:49:41.397 回答
0

从路径中留下战争文件名:http://localhost:8080/messorties/accueil/helloworld

编辑#1:

我刚刚检查了我在 Wildfly 上部署的一个项目:你有 webapp/WEB-INF/jboss-web.xml 文件吗?

我在那里定义了上下文根:

<?xml version="1.0" encoding="UTF-8"?>
<jboss-web version="8.0" xmlns="http://www.jboss.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee http://www.jboss.org/schema/jbossas/jboss-web_8_0.xsd">
  <context-root>/sortiebdd</context-root>
</jboss-web>

检查您是否有此配置定义上下文根。

编辑#2:

除了 jboss-web.xml 我在 WEB-INF 目录中有一个 beans.xml,其中包含以下内容:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
       bean-discovery-mode="annotated">
</beans>

我没有 web.xml,因为将 beans.xml 和 bean-discovery-mode 设置为带注释的,就不再需要 web.xml。

于 2016-08-19T13:07:50.237 回答
0

尝试像这样声明您的 @Path 注释:@Path("/accueil") 和 @Path("/helloworld")

于 2016-08-19T11:15:07.980 回答