是不是可以在jax rs中共享全局变量?

时间:2016-03-12 00:55:40

标签: java ajax jax-rs

在JAX-RS中购买购物车时出现小问题。

我试图将JSON对象添加到存储在JAX-RS类本身中的数组中。 在向@ViewDocking(...) public class DetailsPane extends SomeNode implements ActiveContextSensitive, LocalContextProvider { private final SimpleContextContent contextContent = new SimpleContextContent(); private final SimpleContext context = new SimpleContext(contextContent); private Context activeContext; private MyPojo myPojo; ... @Override public Context getLocalContext() { return context; } @Override public void setActiveContext(Context activeContext) { this.activeContext = activeContext; this.activeContext.addContextListener(MyPojo.class, (ContextEvent event) -> contextChanged()); contextChanged(); } private void contextChanged() { MyPojo newMyPojo = activeContext.find(MyPojo.class); if ((myPojo == null && newMyPojo != null) || (myPojo null && !sample.equals(newMyPojo))) { if (myPojo != null) { unregister(); } myPojo = newMyPojo; if (myPojo != null) { register(); } } } private void unregister() { contextContent.remove(myPojo); //reset DetailsView } private void register() { // configure DetailsView contextContent.add(myPojo); } ... } 发送帖子后向/shop/getBasket发送请求时,无法再次获取更新的数组(我在其中向数组添加了新元素)。

我发布后获得的数组,在我更新后,获取shop/updateBasket似乎没有改变。

出了什么问题?

/shop/getBasket

在ajax中调用@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(); } } 仅返回/shop/getBasket内添加的项目。

1 个答案:

答案 0 :(得分:3)

单独的请求正在获得shopServer的单独实例(顺便说一下,重命名为ShopServer)。因此POST addToBasket获取一个实例,而GET getBasket获得另一个实例。这意味着每个请求都有一个新的JSONArray basket空实例。

您可以通过多种方式存储州。这取决于您的需求。您可以使用数据库(尝试在内存中进行开发),静态变量,单例。

另见