2012-09-06 149 views
1

我正在用澤西島建立REST服務,並且我陷入了一個奇怪的例外。 我想打URI類似於REST:REST實現與澤西島的例外

http://localhost:9889/rest/Users/{userid} 

內容與請求一起發送在JSON類似於:

{ 
"attr1":"name", 
"attr2":"age" 
} 

端點URL代碼如下shwon:

@Path("/rest/Users") 
class Users 
{ 
     @GET 
     @Produces(MediaType.TEXT_PLAIN) 
     @Path("/{userId}") 
     @Consumes(MediaType.APPLICATION_JSON) 
     public String getUserInfoQuery(

      QueryDoc reqJSON, 

      @PathParam("userId") String userId, 

      @HeaderParam("Session-Token") String sessionId, 

      @HeaderParam("Authorization") String authToken) 
    ) 
    { 
    . 
    . 
    . 
    . 
    } 
} 

而且QueryDoc資源是這樣的:

@XmlRootElement 
@XmlAccessorType(XmlAccessType.NONE) 
public class QueryDoc 
{ 

@XmlElement(name = "attr1") 
private String attr1; 


    @XmlElement(name = "attr2") 
    private String attr2; 
    //getters and setters 
. 
. 
. 
. 

} 

當我啓動服務器時,會拋出異常

com.sun.jersey.api.container.ContainerException: Fatal issues found at 
class com.test.Users. See logs for more details. 
at com.sun.jersey.server.impl.application.WebApplicationImpl.newResourceClass(WebApplicationIm.... 

我能在這裏找到這個異常http://www.skybert.net/java/jersey/ 和本link..the原因提的是

public String getUserInfoQuery(

      QueryDoc reqJSON, 

reqJSON不被註釋。如果我使用某些註釋對其進行註釋,則在服務器啓動時不會引發異常,但在這種情況下,url響應毫無意義。如果我刪除這個參數的網址,但它不會消耗請求JSON。 如何使其工作在我想要使用JSON內容的請求以及HeaderParams和PathParams

+0

查找「嚴重」錯誤時打印到日誌中你得到的上述異常之前。用這個錯誤更新你的問題。 –

回答

2

您的getUserInfoQuery()方法是否使用@GET註釋進行了註釋?如果是這樣,它被映射到HTTP GET請求。你不能在HTTP GET中發送實體,所以unannotated參數沒有意義(因爲Jersey把實體映射到unannotated param,但是正如所說的,在GET的情況下沒有實體)。

+0

我該如何做基本的錯誤!但即使我將它改爲PUT也是如此。 – piyush

1

將您的方法getUserInfoQuery()更改爲@PUT
QueryDoc類中刪除除@XmlRootElement之外的所有註釋。由於您在請求正文中傳遞的屬性名稱與QueryDoc中的屬性名稱相同,因此不需要使用@XmlElement。此外@XmlElement應該給予ge getter方法。

這是一個good article與澤西島的ReST。

0

試試這個:

我曾與澤西的「newResourceClass」方法沒有額外的細節同樣的異常;經過幾個小時的調試,我意識到這是由於不明確的URI造成的。

檢查URI和消除任何可能的重複,比如這個:

@Path("/users") 
@GET 
@Produces(MediaType.APPLICATION_JSON) 
public List<String> getUsers() { 
    ... 
} 

@Path("/users") // BAD 
@GET 
@Produces(MediaType.APPLICATION_JSON) 
public String getUserById(@QueryParam("userId") String userId) { 
    ... 
}