简体   繁体   English

用Java创建一个简单的Restful api

[英]Creating a simple Restful api in Java

I'm trying to create a simple Restful hello world api through intellij. 我正在尝试通过intellij创建一个简单的Restful hello world api。 I have created a maven project with the maven-archetype-quickstart and then in pom.xml I have added 我已经使用maven-archetype-quickstart创建了一个maven项目,然后在pom.xml中添加了

<dependency>
  <groupId>org.jboss.resteasy</groupId>
  <artifactId>resteasy-jaxrs</artifactId>
  <version>2.3.7.Final</version>
  <scope>provided</scope>
</dependency>

Then in src->main->java->webservice I have two files: App.java 然后在src-> main-> java-> webservice中,我有两个文件:App.java

    package webservice;

/**
 * Hello world!
 *
 */
public class App 
{
    public static void main( String[] args )
    {
        System.out.println( "Hello World!" );
    }
}

and BookRestService.java 和BookRestService.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";
    }
}

I'm using jBoss-6.4. 我正在使用jBoss-6.4。 Jboss seems to start giving me the following message: Jboss似乎开始给我以下消息:

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

What I would expect is when I open a browser and write http://localhost:8080/book to see H2G2 as answer. 我所期望的是,当我打开浏览器并写http:// localhost:8080 / book看到H2G2作为答案时。 I have also tried http://localhost:8080/webservice/book since it mentions that the web context has been registered to /webservice but again without success. 我还尝试了http:// localhost:8080 / webservice / book,因为它提到Web上下文已注册到/ webservice,但再次失败。 I get a 404 Not Found error. 我收到404找不到错误。 What I'm doing wrong? 我做错了什么?

In your App.java you need to define the ApplicationPath . 在您的App.java您需要定义ApplicationPath Something like below. 像下面这样。

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;
    }
}

After this you REST url will become 之后,您的REST网址将变为

http://localhost:8080/webservice/restRoot/book
Register web context: /webservice

means that all the paths you've coded must be after /webservice. 表示您编码的所有路径都必须在/ webservice之后。 So instead of http://localhost:8080/book you should use http://localhost:8080/webservice/book 因此,您应该使用http://localhost:8080/webservice/book而不是http://localhost:8080/book http://localhost:8080/webservice/book

By default resteasy won't scan your whole project for service class. 默认情况下,resteasy不会扫描整个项目的服务类。 You need to tell to resteasy to scan for it. 您需要告诉resteasy进行扫描。 Use below code in web.xml to enable the scan. 使用web.xml以下代码来启用扫描。

<context-param>
    <param-name>resteasy.scan</param-name>
    <param-value>true</param-value>
</context-param>

Source 资源

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM