Получение ответа, даже если ресурс не должен существовать - PullRequest
0 голосов
/ 29 мая 2018

Я пытаюсь научиться создавать веб-сервисы RESTful.Я пытаюсь сделать следующее: Создать метод, который возвращает объект сообщения (в формате JSON) из списка сообщений.(Который был инициализирован с помощью конструктора)

Он работает нормально для этих URI:

http://localhost:8080/MyMessenger/webapi/testresource/1 http://localhost:8080/MyMessenger/webapi/testresource/2 http://localhost:8080/MyMessenger/webapi/testresource/3

Для URI: http://localhost:8080/MyMessenger/webapi/testresource/4

Я получаю следующий ответ:

{
    "id": 1,
    "message": "m1"
}

Но я добавил только 3 элемента в массив.Что я здесь не так делаю?

Я предполагаю, что это как-то связано с многократным запуском конструктора.Но я не вижу, чтобы это происходило где-либо.

@Path("testresource")
public class MessageResource {

    private static List<Message> list = new ArrayList<>();

    public MessageResource() {
        list.add(new Message(1L,"m1"));
        list.add(new Message(2L,"m2"));
        list.add(new Message(3L,"m3"));
    }

    @GET
    @Path("{messageId}")
    @Produces(MediaType.APPLICATION_JSON)
    public Message getSpecificMessage(@PathParam("messageId") int messageId) {
        return list.get(messageId-1);
    }

}

1 Ответ

0 голосов
/ 29 мая 2018

Список static.Это означает, что существует только один экземпляр списка для всех экземпляров класса.Класс ресурса является значением по умолчанию в области запроса , что означает создание нового экземпляра для каждого запроса.Таким образом, каждый раз, когда создается новый, он добавляется в тот же список * 1006. *.

Если вы хотите, чтобы класс ресурсов был одноэлементным (только один), то вы можете пометить его с помощью @Singleton.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...