Как @POST вложенные подресурсы в Джерси - PullRequest
0 голосов
/ 05 марта 2019

Я посмотрел документацию по Джерси, но все еще немного растерян в том, как писать вложенные ресурсы на Джерси.

У меня есть ресурс 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. Не найден.

Заранее извиняюсь, если это простая ошибка, я впервые работаю с Джерси.

...