2012-09-06 104 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) { 
    ... 
}