使用Jersey在restfull中添加新资源

时间:2015-07-26 22:24:05

标签: java web-services jersey jersey-2.0

我有一个messages资源:

@Path("/messages")
@Consumes("application/json")
@Produces("application/json")
public class MessageResource {

...

@Path("/{msgId}/comments")
public CommentsResource getCommentsResource() {
    return new CommentsResource();
}

现在我想为特定的messageId添加新评论,

所以这是comments资源:

@Path("/")
@Produces("application/json")
@Consumes("application/json")
public class CommentsResource {

@POST
public Comment addNewComment(Comment newComment, @PathParam("msgId") long messageId) {
    commentService.addComment(messageId, newComment);
    return newComment;
}

这里是commentService.addComment

public Comment addComment(long msgId, Comment newComment) {
    Map<Long, Comment> allCommentsOfAMessage = messages.get(msgId).getComments();

    newComment.setId(allCommentsOfAMessage.size() + 1);
    allCommentsOfAMessage.put(newComment.getId(), newComment);
    return newComment;
}

但问题是addNewComment()类的CommentsResource方法从未使用某些网址调用:http://localhost:8080/messages/2/comments

通过POST方法包含Json格式的新评论。

(此网址应为Id = 2的邮件添加新评论)

1 个答案:

答案 0 :(得分:0)

Jersey文档说你可以用root资源是/ messages / comments / {msgId}这样做。如果你在root资源中而不是在子资源中捕获它,它可能无法传播pathparam。

也许你应该把它们放在同一个类中,或者像POST / comments / {msgId}这样的根资源发表评论。