2015-04-19 30 views
2

我試圖使用Java-ee實現REST服務器API以下this教程。我使用Tomcat代替Glassfish。具有IntelliJ和Tomcat的Java-ee REST服務器

我可以開發一個servlet

@WebServlet(name = "hello", urlPatterns = "/") 
public class HelloWorld extends HttpServlet { 
    @Override 
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 
     resp.getWriter().write("=)"); 
    } 
} 

並加入http://localhost:9080/我可以看到笑臉。但是,當我嘗試訪問api路徑(http://localhost:9080/api/recommend/all)時,我也獲得了這張臉。如果我刪除了servlet類,則會出現404錯誤。我想我需要別的東西來自動構建API,但我不知道是什麼。

有人可以告訴我什麼是缺少的?我該怎麼辦?

更新: 在的IntelliJ的Java企業查看我看到:

Web > HelloWorld 
RESTful WS > recommend > all 

這是我的API類:

@ApplicationPath("/api") 
public class REST_Config extends Application { 
} 

和具體方法

@Path("recommend") 
public class RecommenderController { 

    @Path("/all") 
    @GET 
    @Produces("application/json") 
    public JsonArray getAll(){ 
     JsonArrayBuilder builder = Json.createArrayBuilder(); 

     builder.add(Json.createObjectBuilder().add("1", "2.5")); 

     return builder.build(); 
    } 
} 

而POM。 xml:

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>TestREST</groupId> 
    <artifactId>TestREST</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <packaging>war</packaging> 

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

    <build> 
     <finalName>TestREST</finalName> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-war-plugin</artifactId> 
       <version>2.6</version> 
      </plugin> 

     </plugins> 
    </build> 
</project> 
+0

您確定要發送GET請求嗎? – arghtype

+0

很確定。我使用了intellij的REST客戶端 –

回答

5

「代替Glassfish,我使用Tomcat。」

看這個

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

這只不過是基本上是一堆的EE規範的接口更多。沒有實現。 Java EE服務器將具有實現。 Tomcat不是一個EE服務器。它絕對要實現的EE規範的唯一部分是Servlet規範。您正在嘗試使用JAX-RS規範,其中Tomcat默認情況下沒有實現。所以你需要添加該實現。

最簡單的IMO開始是澤西島。你可以簡單地添加這種依賴關係

<dependency> 
    <groupId>org.glassfish.jersey.containers</groupId> 
    <artifactId>jersey-container-servlet</artifactId> 
    <version>2.17</version> 
</dependency> 

它會讓你啓動並運行。方便使用Jersey User Guide。它會被使用。

另外我不知道JsonArray是什麼,但是當你運行這個時會發生什麼,你會得到類似於「No MessageBodyWriter found for JsonArray and media type application/json」的錯誤。你需要提供商。如果你要使用Java EE JSONP API,那麼你應該添加this provider

<dependency> 
    <groupId>org.glassfish.jersey.media</groupId> 
    <artifactId>jersey-media-json-processing</artifactId> 
    <version>2.17</version> 
</dependency> 

當你用JSON很多工作了,你會發現這個API是難以維持。我建議使用傑克遜。如果你還不知道,我會建議你學習它。它提供了簡單的POJO到JSON映射。對於傑克遜,您可以添加this dependency

<dependency> 
    <groupId>org.glassfish.jersey.media</groupId> 
    <artifactId>jersey-media-json-jackson</artifactId> 
    <version>2.17</version> 
</dependency> 
+0

它像魅力一樣工作!謝謝!這是一個很好的解釋 –