Java 不可能在jax-rs中共享全局变量更改吗?
在JAX-RS中使用购物车时遇到一个小问题 我试图将JSON对象添加到JAX-RS类本身中存储的数组中。 在发布到Java 不可能在jax-rs中共享全局变量更改吗?,java,ajax,jax-rs,Java,Ajax,Jax Rs,在JAX-RS中使用购物车时遇到一个小问题 我试图将JSON对象添加到JAX-RS类本身中存储的数组中。 在发布到shop/updateBasket之后,由于请求/shop/getBasket(其中我向数组添加了一个新元素),无法再次获取更新的数组 我在发布、执行get/shop/getBasket后得到的数组在我更新后似乎没有改变 怎么了 @Path("shop") public class shopServer(){ JSONArray basket = new JSONArray;
shop/updateBasket
之后,由于请求/shop/getBasket
(其中我向数组添加了一个新元素),无法再次获取更新的数组
我在发布、执行get/shop/getBasket
后得到的数组在我更新后似乎没有改变
怎么了
@Path("shop")
public class shopServer(){
JSONArray basket = new JSONArray;
@POST
@Path("addToBasket/{itemID}")
public String updateBasket(@PathParam("itemID") String itemID){
basket.put(new JSONObject().put("obj",itemID));
return null;
}
@GET
@Path("getBasket")
public String getBasket(){
basket.put(new JSONObject().put("obj","asd"));
return basket.toString();
}
}
在ajax中调用
/shop/getBasket
只返回getBasket()
中添加的项目。不同的请求将获得不同的shopServer
(顺便说一句,重命名为shopServer
)。因此,POST-addToBasket
获取一个实例,GET-getBasket
获取另一个实例。这意味着您对每个请求都有一个新的空的JSONArray basket
有很多方法可以存储状态。这取决于你的需要。您可以使用数据库(在内存中进行开发)、静态变量和单例
另见
shopServer
的单独实例(顺便说一句,重命名为shopServer
)。因此,POST-addToBasket
获取一个实例,GET-getBasket
获取另一个实例。这意味着您对每个请求都有一个新的空的JSONArray basket
有很多方法可以存储状态。这取决于你的需要。您可以使用数据库(在内存中进行开发)、静态变量和单例
另见
@singleton
。这不是线程安全的。使用数据库。如果它只是一个权宜之计,那么您要么需要将资源类设置为单例,要么将字段设置为静态。默认情况下,将为每个请求创建资源类的新实例。如果您想要一个单例,您可以在类的顶部添加@singleton
。