Java 如何在Jersey中@POST嵌套子资源
我已经看过了Jersey文档,但是对于如何在Jersey中编写嵌套资源,我仍然有点迷茫 我有一个人资源,我希望有待办事项列表子资源。因此,您可以以个人身份登录并转到此url获取您的列表:{personId}/lists/{listId}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();
@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);
}