带有路径注释的简单REST服务 - 404错误

时间:2017-03-22 21:01:54

标签: java web-services rest jboss jax-rs

如何使这个简约的REST示例有效?

Projet名称:hello-rest

应用代码:

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

@ApplicationPath("resources")
public class MyJAXWSApp extends Application {
}

MessageResource:

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

    @Path("message")
    public class MessageResource {
    @GET
    public String Hello() {
        return "hello!";
    }
}

MAVEN config:

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

问题:
到目前为止,当我调用服务URI时,通过Eclipse Neon在WildFly 10x中部署会导致404错误:

http://localhost:8080/hello-rest/resources/message

来源:Adam Bien

PS:服务器部署正常:

  

22:20:04,486 INFO [org.wildfly.extension.undertow](MSC服务线程1-2)WFLYUT0006:在127.0.0.1:8080上取消默认侦听HTTP侦听器   ...

     

22:20:04,582 INFO [org.jboss.as.server.deployment](MSC服务主题1-5)WFLYSRV0027:开始部署“hello-rest-0.0.1-SNAPSHOT.war”(运行时名称) :“hello-rest-0.0.1-SNAPSHOT.war”)   ...

     

22:20:04,974 INFO [org.wildfly.extension.undertow](MSC服务主题1-3)WFLYUT0006:Undertow HTTPS监听器https监听127.0.0.1:8443   ....

     

22:20:06,992 INFO [org.jboss.resteasy.resteasy_jaxrs.i18n](ServerService线程池 - 59)RESTEASY002225:部署javax.ws.rs.core.Application:class JAXRSConfiguration   ...

     

22:20:07,074 INFO [org.wildfly.extension.undertow](ServerService线程池 - 59)WFLYUT0021:已注册的Web上下文:/hello-rest-0.0.1-SNAPSHOT

     

22:20:07,135 INFO [org.jboss.as.server](ServerService线程池 - 34)WFLYSRV0010:已部署“hello-rest-0.0.1-SNAPSHOT.war”(运行时名称:“hello-其余-0.0.1-SNAPSHOT.war“)

2 个答案:

答案 0 :(得分:2)

我在服务器输出中看到的一件事是它将路径注册为“/hello-rest-0.0.1-SNAPSHOT”。因此,在您将Maven配置更改为不将版本附加到战争之前,您必须在调用服务时向URL添加“-0.0.1-SNAPSHOT”。
http://localhost:8080/hello-rest-0.0.1-SNAPSHOT/resources/message

我也经常看到资源(而不是方法)上的ApplicationPath和Path注释以'/'开头。我不确定它是否是必需的,但无论如何我都建议将其作为最佳实践。

更新:查看here,从JAX-RS 2开始,不需要使用尾随和斜杠。

答案 1 :(得分:0)

您的MyJAXWSApp

中是否有这个?
private void addRestResourceClasses(Set<Class<?>> resources) {
    resources.add(your.package.name.MessageResource.class);
}

注意:确保包装正确无误。我只是以your.package.name为例,但您需要提供完全限定的类名。