2016-07-28 73 views
1

我一直在與澤西島提供的restfull webservices一起工作,結合maven碼頭插件在我以前的工作。但是現在對於一個個人項目,我自己從頭開始,而且即使基本版本也無法完成。我試圖按照一些教程,但他們是舊的或脫離主題。maven jetty插件的基本Jersey webservice

最近的例子我想是: jersey 2 + spring 4 + jetty-maven-plugin

所以下面CONFIGS使運行插件,但無論它給了我404的

POM其網址我嘗試:

<?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> 
    <packaging>war</packaging> 
    <groupId>foo</groupId> 
    <artifactId>bar</artifactId> 
    <version>1.0-SNAPSHOT</version> 

    <properties> 
     <jetty.version>9.3.11.v20160721</jetty.version> 
     <jersey.version>2.23.1</jersey.version> 
    </properties> 

    <dependencies> 
     <dependency> 
      <groupId>org.glassfish.jersey.containers</groupId> 
      <artifactId>jersey-container-servlet</artifactId> 
      <version>${jersey.version}</version> 
     </dependency> 

     <dependency> 
      <groupId>org.glassfish.jersey.core</groupId> 
      <artifactId>jersey-server</artifactId> 
      <version>${jersey.version}</version> 
     </dependency> 

    </dependencies> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.eclipse.jetty</groupId> 
       <artifactId>jetty-maven-plugin</artifactId> 
       <version>${jetty.version}</version> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

web.xml

<?xml version="1.0" encoding="ISO-8859-1"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> 
    <display-name>test</display-name> 
    <servlet> 
     <servlet-name>Jersey REST Service</servlet-name> 
     <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 
     <init-param> 
      <param-name>javax.ws.rs.Application</param-name> 
      <param-value>com.foo.bar</param-value> 
     </init-param> 
     <!--<load-on-startup>1</load-on-startup>--> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>Jersey REST Service</servlet-name> 
     <url-pattern>/*</url-pattern> 
    </servlet-mapping> 

</web-app> 

resourceConfiguration.java

package com.foo.bar; 

import org.glassfish.jersey.server.ResourceConfig; 

public class ResourceConfiguration extends ResourceConfig { 
    public ResourceConfiguration() { 
     register(entrypoint.class); 
    } 

} 

和我的服務類

package com.foo.bar; 

import javax.ws.rs.GET; 
import javax.ws.rs.Path; 
import javax.ws.rs.Produces; 
import javax.ws.rs.core.MediaType; 

public class entrypoint { 
    @GET 
    @Path("/test") 
    @Produces(MediaType.TEXT_PLAIN) 
    public String test() { 
     return "it works"; 
    } 

    @GET 
    @Path("/") 
    @Produces(MediaType.TEXT_HTML) 
    public String test2() { 
     return "it works"; 
    } 

} 

沒什麼特別好的,我覺得這應該工作的開箱。 碼頭服務器啓動,但就像我說我得到碼頭404頁在每個url排列我嘗試。

在此先感謝您的任何和所有輸入。

回答

2

需要做一些改變才能使其發揮作用。請按照以下步驟操作。

第1步:使用POJO映射和資源配置類而不是包名更改您的web.xml。

<servlet> 
     <servlet-name>Jersey REST Service</servlet-name> 
     <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 
     <init-param> 
      <param-name>javax.ws.rs.Application</param-name> 
      <param-value>bar.com.ravi.ResourceConfiguration</param-value> 
     </init-param> 
     <init-param> 
      <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name> 
      <param-value>true</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>Jersey REST Service</servlet-name> 
     <url-pattern>/*</url-pattern> 
    </servlet-mapping> 

第2步:改變你的ResourceConfiguration類像下面包的信息。

public class ResourceConfiguration extends ResourceConfig { 
    public ResourceConfiguration() { 
     packages("bar.com.ravi"); 
     register(Entrypoint.class); 
    } 

} 

第3步:與類級別@Path註釋更改您的入口點類。

import javax.ws.rs.GET; 
    import javax.ws.rs.Path; 
    import javax.ws.rs.Produces; 
    import javax.ws.rs.core.MediaType; 

    @Path("/hi") 
    public class Entrypoint { 
     @GET 
     @Path("/test") 
     @Produces(MediaType.TEXT_PLAIN) 
     public String test() { 
      return "it works"; 
     } 

     @GET 
     @Path("/") 
     @Produces(MediaType.TEXT_HTML) 
     public String test2() { 
      return "it works"; 
     } 

    } 

第4步:改變你的POM。在下面的構建標記xml。

<build> 
    <finalName>bar</finalName> 
     <plugins> 
      <plugin> 
       <groupId>org.eclipse.jetty</groupId> 
       <artifactId>jetty-maven-plugin</artifactId> 
       <version>9.2.11.v20150529</version> 
       <configuration> 
        <scanIntervalSeconds>10</scanIntervalSeconds> 
        <webApp> 
         <contextPath>/bar</contextPath> 
        </webApp> 
        <httpConnector> 
         <port>8888</port> 
        </httpConnector> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 

第5步:運行以下命令你的命令PROMT。

mvn jetty:run 

步驟6:點擊瀏覽器下面的網址

http://localhost:8888/bar/hi/test 
+0

非常感謝。記錄修改它的變化如下:步驟1:是一個typeo,我的不好 步驟2:添加包。 步驟3:添加類級別@Path 步驟4:添加上下文路徑。 所有其他人不影響結果,但沒有做任何這些使整個事情崩潰。有趣的部分是我已經嘗試了所有這些在一個點或另一個只是不是所有在一起。 *編輯輸入按鈕是一件有趣的事情 – Rhed

0

,這是錯誤的配置最明顯的一點是

<init-param> 
     <param-name>javax.ws.rs.Application</param-name> 
     <param-value>com.foo.bar</param-value> 
    </init-param> 

我相信這一定是

<init-param> 
     <param-name>javax.ws.rs.Application</param-name> 
     <param-value>com.foo.bar.ResourceConfiguration</param-value> 
    </init-param> 

然後添加您的資源類目前坐在包。

<init-param> 
     <param-name>com.sun.jersey.config.property.packages</param-name> 
     <param-value>com.foo.bar</param-value> 
    </init-param> 
+0

廣場@Path註釋你的入口點類。例如@Path(「bar」)然後點擊localhost:8080/bar/test –

+0

感謝這也是錯誤的一部分,請在我接受的答案上查看我的評論。 – Rhed

+0

酷!很高興知道它現在正在工作。 –

0

試試這個:

 <plugin> 
      <groupId>org.eclipse.jetty</groupId> 
      <artifactId>jetty-maven-plugin</artifactId> 
      <version>${jetty.version}</version> 
      <configuration> 
       <webApp> 
        <contextPath>/bar</contextPath> 
       </webApp> 
      </configuration> 
     </plugin> 

,並引導你的瀏覽器http://localhost:8080/bar/test,例如。

+0

這是解決方案的一部分,請參閱我對已接受答案的評論。感謝您的幫助 – Rhed

相關問題