2015-08-28 54 views
2

我試着編寫一個簡單的RESTEasy示例來了解它是如何工作的。我發現這裏的信息: http://www.mkyong.com/webservices/jax-rs/integrate-jackson-with-resteasy/ http://www.mkyong.com/webservices/jax-rs/resteasy-hello-world-example/簡單的RESTtEasy示例不起作用

這是非常簡單的,我的理解是從另一個寧靜的例子是類似的,只是正常的工作原理。

@Path("/person") 
public class PersonResource { 
    private static final org.slf4j.Logger LOG = LoggerFactory.getLogger(PersonResource.class); 

    private final static String FIRST_NAME = "firstName"; 
    private final static String LAST_NAME = "lastName"; 
    private final static String EMAIL = "email"; 

    private Person person = new Person(1, "Sample", "Person", "[email protected]"); 

    @GET 
    @Produces(MediaType.TEXT_PLAIN) 
    public String respondAsReady() { 
     return "Entered PersonResource"; 
    } 

    @GET 
    @Path("/get") 
    @Produces("application/json") 
    public Person getProductInJSON() { 
     return person; 
    } 

    @GET 
    @Path("sample") 
    @Produces(MediaType.APPLICATION_JSON) 
    public Response getSamplePerson() { 
     LOG.debug("getSamplePerson()"); 
     JSONObject jsonObject = new JSONObject(); 
     try { 
      jsonObject.put("Person First Name:", person.getFirstName()); 
      jsonObject.put("Person Last Name:", person.getLastName()); 
     } catch (JSONException e) { 
      LOG.debug("jsonObect.put failed"); 
     } 

     String result = "jsonObject:" + jsonObject; 
     return Response.status(200).entity(result).build(); 
    } 
} 

我的web.xml:

<context-param> 
    <param-name>resteasy.resources</param-name> 
    <param-value>com.restexample.PersonResource</param-value> 
</context-param> 

<listener> 
    <listener-class> 
     org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap 
    </listener-class> 
</listener> 

<servlet> 
    <servlet-name>resteasy-servlet</servlet-name> 
    <servlet-class> 
     org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher 
    </servlet-class> 
</servlet> 

<servlet-mapping> 
    <servlet-name>resteasy-servlet</servlet-name> 
    <url-pattern>/rest/*</url-pattern> 
</servlet-mapping> 

我的pom.xml:

<!-- RESTEasy--> 
<repositories> 
    <repository> 
     <id>JBoss repository</id> 
     <url>https://repository.jboss.org/nexus/content/groups/public-jboss/</url> 
    </repository> 
</repositories> 


<dependencies> 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>servlet-api</artifactId> 
     <version>2.5</version> 
     <scope>provided</scope> 
    </dependency> 

    <dependency> 
     <groupId>org.jboss.resteasy</groupId> 
     <artifactId>resteasy-jaxrs</artifactId> 
     <version>3.0.11.Final</version> 
    </dependency> 

    <dependency> 
     <groupId>org.jboss.resteasy</groupId> 
     <artifactId>resteasy-jackson-provider</artifactId> 
     <version>3.0.11.Final</version> 
    </dependency> 
</dependencies> 

當我嘗試http://localhost:8080/rest/person/sample或任何其它路徑存取權限的方法有一個空白屏幕。我沒有404找不到!只是空白屏幕。 (我正在使用TomCat)。誰能幫我?

+0

好吧,就像在這些例子中,我想要在瀏覽器中打印信息。如果我嘗試[http:// localhost:8080/rest/person]我希望打印「輸入PersonResource」我沒有任何例外的服務器日誌。 – green

+0

您的調試日誌消息是否顯示?你有沒有使用調試器來瀏覽你的程序? –

+0

我的調試消息不會出現在日誌文件中 – green

回答

1

我發現了什麼問題。在我的pom.xml中,我有:

<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 

此監聽器正在創建應用程序上下文。到現在爲止沒有錯。 是在web.xml中定義的ResteasyBootstrap提供以及上下文:

<listener> 
    <listener-class>org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class> 
</listener> 

因爲無論聽衆提供不同的背景下,URL不會返回一個404 NOT FOUND,既沒有好的結果。

解決辦法:

刪除在XML聽者的ContextLoaderListener,一切都將正常工作。

0

試試這個:

@GET 
@Path("sample") 
@Produces(MediaType.APPLICATION_JSON) 
public Response getSamplePerson() { 
    LOG.debug("getSamplePerson()"); 
    return Response.status(Status.OK).entity(person).build(); 
} 
+0

它不起作用:(另一個奇怪的是我的日誌文件是空的,即使我使用記錄器,日誌。調試不會在日誌文件中產生任何輸出 – green

+0

嘗試並調試您的Tomcat並在'getSamplePerson()'中設置一個斷點,以查看它是否在您打開URL時調用。 –