2015-07-11 125 views
0

我一直在嘗試這個過去幾天有很多例子,我無法使REST服務運行。我有tomcat8(Ubuntu 14.x)/澤西島。 有什麼想法?休息服務 - 澤西/ tomcat8 404錯誤

pom.xml的片斷

<dependencies> 
    <dependency> 
     <groupId>javax.ws.rs</groupId> 
     <artifactId>jsr311-api</artifactId> 
     <version>1.1.1</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>com.sun.jersey</groupId> 
     <artifactId>jersey-server</artifactId> 
     <version>1.18.1</version> 
    </dependency> 
    <dependency> 
     <groupId>com.sun.jersey</groupId> 
     <artifactId>jersey-servlet</artifactId> 
     <version>1.18.1</version> 
    </dependency> 
</dependencies> 

的web.xml片斷

<servlet> 
    <servlet-name>RestService</servlet-name> 
    <!--servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class--> 
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> 
      <init-param> 
     <param-name>com.sun.jersey.config.property.packages</param-name> 
<!--param-name>jersey.config.server.provider.packages</param-name--> 
     <param-value>mail.service</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>RestService</servlet-name> 
    <url-pattern>/rest/*</url-pattern> 
    </servlet-mapping> 

在Tomcat啓動時沒有錯誤:

11 - 07月2015年11:23:08.327 INFO [ localhost-startStop-8] com.sun.jersey.server.impl.application.WebApplicationImpl._initiate Initiate Jerse y application,version'Jersey:1.18.1 02/19/2014 03:28 AM'11-Jul-2015 11:23:08.795 INFO [localhost-startStop-8] org.apache.catalina.startup.HostConfig。 deployWAR部署的Web應用程序 存檔 /home/apcuser/tomcat8/apache-tomcat-8.0.24/webapps/ExProcess.war已 在1,488毫秒

休息服務類完成:

package mail.service; 

import javax.ws.rs.Consumes; 
import javax.ws.rs.GET; 
import javax.ws.rs.PUT; 
import javax.ws.rs.Path; 
import javax.ws.rs.PathParam; 
import javax.ws.rs.Produces; 
import javax.ws.rs.core.Context; 
import javax.ws.rs.core.MediaType; 
import javax.ws.rs.core.Request; 
import javax.ws.rs.core.Response; 
import javax.ws.rs.core.UriInfo; 
import javax.xml.bind.JAXBElement; 

//import org.slf4j.Logger; 
//import org.slf4j.LoggerFactory; 

@Path("restservice") 
public class RestService { 
     @Context 
     UriInfo uriInfo; 
     @Context 
     Request request; 
     String id; 

     @GET 
     @Path("{name}") 
     public String sayHello(@PathParam("name") String name){ 
      return "Hello " + name; 
     } 

} 

結果:

HTTP狀態404 -/REST/restservice /測試名

更新:下面的什麼是錯我的項目,從無到有剛開始我無法弄清楚:http://javabrains.koushik.org/courses/javaee_jaxrs/lessons/Setting-Up 它現在。

+1

重新開始並轉到[off this](http://stackoverflow.com/a/30020830/2587435),看看會發生什麼。 –

回答

1
@Path("/restservice") 
public class RestService { 
     @Context 
     UriInfo uriInfo; 
     @Context 
     Request request; 
     String id; 

     @GET 
     @Path("/{name}") 
     @Produces(MediaType.TEXT_PLAIN) 
     public String sayHello(@PathParam("name") String name){ 
      return "Hello " + name; 
     } 

} 

HTTP 404找不到文件錯誤,你得到這個,因爲你沒有追加/@Path註釋值。

@Path("restservice")應該@Path("/restservice")@Path("{name}")@Path("/{name}")

編輯更新 -

添加@Produces(MediaType.TEXT_PLAIN)

+0

試過這個,沒有工作。我怎麼知道我的類是否被tomcat加載? –

+0

檢查/ WEB-INF /目標文件夾中的類,如果.class文件存在或不存在。第二次檢查webapps文件夾,展開戰爭並查看/ WEB-INF /類 –

+0

中是否存在.class文件,嘿,你試圖打的確切url? –

-1

你試試以下

變化在web.xml

<servlet-mapping> 
    <servlet-name>RestService</servlet-name> 
    <url-pattern>/*</url-pattern> 
    </servlet-mapping> 

和servlet的

@Path("/rest/restservice/") 
public class RestService { 
     @Context 
     UriInfo uriInfo; 
     @Context 
     Request request; 
     String id; 

     @GET 
     @Path("/{name}/") 
     public String sayHello(@PathParam("name") String name){ 
      return "Hello " + name; 
     } 

} 

而且我看你有評論的代碼。但你有清除webapps目錄嗎?停止tomcat容器 - >轉到webapps目錄 - >刪除文件夾ExProcess(不是war) - >啓動容器。

+0

Aniket,我正在關注一些示例,並在該web.xml中有這些條目。 [請看這個例子](http://www.java4s.com/web-services/jersey-hello-world-example-using-jax-rs-specification/) –

+0

Aniket,servlet會處理'/ rest/restservice /'因爲url模式是'/ rest/*',並且OP在RestService中提到了'@Path(「restservice」)'實際上應該是'@Path(「/ restservice」)''。 –

+0

另外,''和''中的''的restService' servlet名稱是相同的,在這種情況下指向'com.sun.jersey.spi.container .servlet.ServletContainer' –

相關問題