gpt4 book ai didi

java - 即使资源不应该存在也能得到响应

转载 作者:行者123 更新时间:2023-12-02 02:07:18 24 4
gpt4 key购买 nike

我正在尝试学习如何创建 RESTful Web 服务。我正在尝试执行以下操作:创建一个从消息列表返回消息对象(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);
}

}

最佳答案

该列表是静态的。这意味着该类的所有实例只有一个列表实例。资源类在请求范围中是默认的,这意味着每个请求都会实例化一个新的资源类。因此,每次创建一个新列表时,它都会添加到同一个静态列表中。

如果你希望资源类是单例(只有一个),那么你可以用@Singleton进行注释。

关于java - 即使资源不应该存在也能得到响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50592336/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com