如何使这个简约的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“)
答案 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
为例,但您需要提供完全限定的类名。