我有一个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的邮件添加新评论)
答案 0 :(得分:0)
Jersey文档说你可以用root资源是/ messages / comments / {msgId}这样做。如果你在root资源中而不是在子资源中捕获它,它可能无法传播pathparam。
也许你应该把它们放在同一个类中,或者像POST / comments / {msgId}这样的根资源发表评论。