J'essaye de créer une API simple Restful hello world via intellij. J'ai créé un projet maven avec le maven-archetype-quickstart puis dans pom.xml j'ai ajouté
15:08:01,550 INFO [org.jboss.ws.common.management] (MSC service thread 1-2) JBWS022052: Starting JBoss Web Services - Stack CXF Server 4.3.4.Final-redhat-1 15:08:01,824 INFO [org.jboss.as.remoting] (MSC service thread 1-1) JBAS017100: Listening on 127.0.0.1:4447 15:08:01,824 INFO [org.jboss.as.remoting] (MSC service thread 1-7) JBAS017100: Listening on 127.0.0.1:9999 15:08:01,827 INFO [org.jboss.as.server.deployment.scanner] (MSC service thread 1-3) JBAS015012: Started FileSystemDeploymentService for directory /home/symeon/myprojects/applicationserver/jboss-eap-6.4-clean/standalone/deployments 15:08:02,113 INFO [org.jboss.as] (Controller Boot Thread) JBAS015961: Http management interface listening on http://127.0.0.1:9990/management 15:08:02,114 INFO [org.jboss.as] (Controller Boot Thread) JBAS015951: Admin console listening on http://127.0.0.1:9990 15:08:02,115 INFO [org.jboss.as] (Controller Boot Thread) JBAS015874: JBoss EAP 6.4.0.GA (AS 7.5.0.Final-redhat-21) started in 5345ms - Started 153 of 191 services (57 services are lazy, passive or on-demand) Connected to server [2019-01-24 03:08:02,544] Artifact webservice: Artifact is being deployed, please wait... 15:08:02,721 INFO [org.jboss.as.server.deployment] (MSC service thread 1-6) JBAS015876: Starting deployment of "webservice" (runtime-name: "webservice.war") 15:08:03,236 INFO [org.jboss.web] (ServerService Thread Pool -- 7) JBAS018210: Register web context: /webservice 15:08:03,400 INFO [org.jboss.as.server] (management-handler-thread - 2) JBAS015859: Deployed "webservice" (runtime-name : "webservice.war") [2019-01-24 03:08:03,428] Artifact webservice: Artifact is deployed successfully [2019-01-24 03:08:03,428] Artifact webservice: Deploy took 884 milliseconds
Puis dans src-> main-> java-> webservice j'ai deux fichiers: App.java
package webservice; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; @Path("/book") public class BookRestService { @GET @Produces("text/plain") public String getBookTitle() { return "H2G2"; } }
et BookRestService.java
package webservice; /** * Hello world! * */ public class App { public static void main( String[] args ) { System.out.println( "Hello World!" ); } }
J'utilise jBoss-6.4. Jboss semble commencer à me donner le message suivant:
<dependency> <groupId>org.jboss.resteasy</groupId> <artifactId>resteasy-jaxrs</artifactId> <version>2.3.7.Final</version> <scope>provided</scope> </dependency>
Ce à quoi je m'attendais, c'est lorsque j'ouvre un navigateur et que j'écris http: // localhost: 8080 / book pour voir H2G2 comme réponse. J'ai également essayé http: // localhost: 8080 / webservice / book car il mentionne que le contexte Web a été enregistré sur / webservice mais encore une fois sans succès. J'obtiens une erreur 404 Not Found. Qu'est-ce que je fais mal?
3 Réponses :
Register web context: /webservice means that all the paths you've coded must be after /webservice. So instead of http://localhost:8080/book you should use http://localhost:8080/webservice/book
Désolé ... je ne l'ai pas mentionné. J'ai également essayé localhost: 8080 / webservice / book pour la raison que vous avez mentionnée, mais j'obtiens toujours une erreur 404
@SymeonMattes quel est votre fichier web.xml?
Par défaut, resteasy n'analysera pas l'ensemble de votre projet pour la classe de service. Vous devez dire à Resteasy de le rechercher. Utilisez le code ci-dessous dans web.xml
pour activer l'analyse.
<context-param> <param-name>resteasy.scan</param-name> <param-value>true</param-value> </context-param>
Dans maven-archetype-quickstart, il ne contient pas de fichier web.xml
Rest services est une application Web, idéalement, vous devriez la créer en tant que maven-archetype-webapp
Dans votre App.java
, vous devez définir le ApplicationPath
. Quelque chose comme ci-dessous.
http://localhost:8080/webservice/restRoot/book
Après cela, votre URL REST deviendra
import java.util.HashSet; import java.util.Set; import javax.ws.rs.ApplicationPath; import javax.ws.rs.core.Application; @ApplicationPath("/restRoot") public class App extends Application { @Override public Set<Class<?>> getClasses() { HashSet<Class<?>> classes = new HashSet<Class<?>>(); classes.add(BookRestService.class); return classes; } }
Ce n'est pas nécessaire les getClasses. Et je viens d'ajouter @ApplicationPath ("/"). La réponse était donc sur localhost: 8080 / webservice / book . Merci
essayez localhost: 8080 / webservice / book
Désolé ... je ne l'ai pas mentionné. J'ai également essayé localhost: 8080 / webservice / book pour la raison que vous avez mentionnée, mais je reçois toujours une erreur 404
Dans resteasy, vous devez enregistrer votre classe de service ou demander au resteasy de rechercher dans certains packages racine la classe de service. Par défaut, resteasy n'analysera pas l'ensemble du projet pour la classe de service.
Merci, mais comment cela se fait-il?
pouvez-vous afficher votre fichier web.xml? essayez d'ajouter resteasy.scan true à votre fichier web.xml.