在 Jersey 中添加新资源
Add new resource in restfull with Jersey
我有一个 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;
}
但问题是 CommentsResource
class 的 addNewComment()
方法从未被某些 URL 调用过,例如:http://localhost:8080/messages/2/comments
通过 POST
方法以 Json 格式包含新评论。
(此 URL 应向 ID=2 的消息添加新评论)
Jersey 文档说您可以通过根资源为 /messages/comments/{msgId} 的方式执行此操作。如果您在根资源而不是子资源中捕获它,它可能无法传播路径参数。
也许您应该将它们放在同一个 class 中,或者将评论作为根资源,例如 POST /comments/{msgId}.
我有一个 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;
}
但问题是 CommentsResource
class 的 addNewComment()
方法从未被某些 URL 调用过,例如:http://localhost:8080/messages/2/comments
通过 POST
方法以 Json 格式包含新评论。
(此 URL 应向 ID=2 的消息添加新评论)
Jersey 文档说您可以通过根资源为 /messages/comments/{msgId} 的方式执行此操作。如果您在根资源而不是子资源中捕获它,它可能无法传播路径参数。
也许您应该将它们放在同一个 class 中,或者将评论作为根资源,例如 POST /comments/{msgId}.