Я посмотрел документацию по Джерси, но все еще немного растерян в том, как писать вложенные ресурсы на Джерси.
У меня есть ресурс Person, для которого я хочу сделатьсписок подресурсов.Таким образом, вы можете войти как человек и перейти по этому 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);
}
}
}
}
В клиентском приложении я вызываю эту функцию:
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);
}
Но когда я пытаюсь создать список для созданного personId, я получаю ошибку 404 not found.Эти операции очень похожи на то, как я создал класс person, поэтому я, должно быть, делаю что-то не так с тем, как я структурирую свой класс подресурсов.
Я также получаю нулевое значение, возвращаемое в URL после вызова postToDoList,но даже если я жестко закодирую его для работы с правильным идентификатором, я все равно получаю 404. Не найден.
Заранее извиняюсь, если это простая ошибка, я впервые работаю с Джерси.