Java 不可能在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;

在JAX-RS中使用购物车时遇到一个小问题

我试图将JSON对象添加到JAX-RS类本身中存储的数组中。 在发布到
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