Java 如何在Jersey中@POST嵌套子资源

Java 如何在Jersey中@POST嵌套子资源,java,rest,jersey,jersey-2.0,Java,Rest,Jersey,Jersey 2.0,我已经看过了Jersey文档,但是对于如何在Jersey中编写嵌套资源,我仍然有点迷茫 我有一个人资源,我希望有待办事项列表子资源。因此,您可以以个人身份登录并转到此url获取您的列表:{personId}/lists/{listId} @Path("person") public class PersonRestService { private PersonDataService dataService = PersonDataService.getInstance();

我已经看过了Jersey文档,但是对于如何在Jersey中编写嵌套资源,我仍然有点迷茫

我有一个人资源,我希望有待办事项列表子资源。因此,您可以以个人身份登录并转到此url获取您的列表:{personId}/lists/{listId}

 @Path("person")
public class PersonRestService {
    private PersonDataService dataService = PersonDataService.getInstance();
    private ToDoListDataService listDataService = ToDoListDataService.getInstance();

    //Omitted code for the Person resource

    //Get a list by it's numerical ID number
    @GET
    @Path("{id}/Lists/{listId}")
    public ToDoList getListById(@PathParam("id")String id, @PathParam("listId")String listId)
    {
        return listDataService.getToDoListById(listId);   
    }

    //Post a new list to the {personId}/Lists URL
    @POST
    @Path("{personId}/Lists/")
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.TEXT_PLAIN)
    public String createToDoList(@PathParam("personId")String personId, @PathParam("listId")String listId,ToDoList newList)
    {
        return listDataService.addToDoList(newList);
    }
以下是ToDoListDataService:

 public class ToDoListDataService {

    private static  ToDoListDataService ourInstance = new ToDoListDataService();
    private  List<ToDoList> ToDoLists = new ArrayList<>();

    public static ToDoListDataService getInstance()
    {
    return ourInstance;
}

// Functions for ToDoList

    public String addToDoList(ToDoList toDoList)
    {
        String newListId = Integer.toString(ToDoLists.size() + 1);
        toDoList.setId(newListId);
        ToDoLists.add(toDoList);
        return newListId;
    }

    public List<ToDoList> getLists()
    {
        return ToDoLists;
    }

    public ToDoList getToDoListById(String id)
    {
        for (ToDoList list: ToDoLists)
        {
            if(list.getId().equals(id))
            {
                return list;
            }
        }

        return null;
    }

    public void deleteToDoListById(String id)
    {
        for (ToDoList list: ToDoLists)
        {
            if(list.getId().equals(id))
            {
                ToDoLists.remove(list);
            }
        }
    }
但当我尝试为已创建的personId创建列表时,会出现404 not found错误。这些操作与我创建person类的方式非常相似,因此我在构建子资源类的方式上肯定做错了什么

在调用postToDoList后,我也会将null返回到url,但即使我硬编码它以使用正确的ID,我仍然会得到一个404 not found


如果这是一个简单的错误,请提前道歉,这是我第一次使用Jersey。

请记住,默认行为是为每个请求创建一个新的资源实例。考虑到这一点,请检查您的逻辑,看看这是否会产生任何影响。请记住,默认行为是为每个请求创建一个新的资源实例。记住这一点,检查你的逻辑,看看这是否会有什么不同。
 private static void postToDoList(WebTarget target, String personId, String title)
    {

        ToDoList list = ClientUtil.createNewList(title);

        // Set correct path for the person who wants to create this list
        target = target.path(String.valueOf(personId) + "/Lists/" + String.valueOf(list.getId()));
        Response response = target.request().accept(MediaType.TEXT_PLAIN_TYPE).post(Entity.json(list));

        System.out.println(response);
    }