我又回来寻找一个最好的在线解决方案中心的解决方案。
@Path("/user/service")
public class UserFeedService {
String status = "status_idle";
String errorStatus = "ok";
@POST
@Path("/register")
@Produces("application/json")
public String register() {
if (!status.equals("status_running")) {
registerUser();
return errorStatus ;
}
return status ;
}
public void resgisterUser() {
synchronized {
status = "status_running"
}
//code below
}
}
上面的代码是我正在处理的restful服务的示例代码,只需单击按钮即可从我的vaadin应用程序调用该代码。
现在我想要的是当用户第一次调用Web服务并且状态设置为"status_running"
时单击按钮,以防用户在上一次服务调用时再次单击该按钮仍在进行中,服务应返回“status_running”,该状态将显示给用户。
但上面的代码总是会返回errorStatus
,并且在按钮上多次点击时无法按预期显示。
我在这里做错了什么或浏览器是如何工作的,也就是等待按钮完成后第一次调用服务然后调用
答案 0 :(得分:0)
您的问题的简单答案是UserFeedService
可能在每个请求上重新创建,因此status
属性是每个请求的不同默认实例(即每个请求始终为“status_idle”)请求)。将其更改为static
应该会导致您请求的行为。
然而,这是一个非常糟糕的想法将这样的静态状态引入RESTful服务。不仅难以测试和调试。如果您确实只希望一次只能进行一次“注册”,那么将状态外部化为某种数据存储会更好。