我正在尝试使用jax -ws进行Web应用程序。我的问题似乎很简单,但是我无法理解如何解决它。我有类变量,我需要在获取和发布请求中使用哪些值。例如,我在GET Methode中启动"响应",然后需要在Methode中使用它,但是当我从JS调用POST API/对话时,我会收到错误,因为"响应"仍然是无效的。如何为变量保存值?这是我的代码
import javax.ws.rs.*;
@ApplicationPath("api")
@Path("conversation")
public class Conversation {
private final String conversationWorkspace = "myworkspace";
private final static String CONVERSATION_ID = "myid";
private final static String CONVERSATION_PASS = "mypass";
private MessageRequest request;
private MessageResponse response;
private ConversationService service;
@GET
@Produces("application/text")
public String getInitiatePhrase(){
service = new ConversationService("2017-05-26", CONVERSATION_ID, CONVERSATION_PASS);
response = service.message(conversationWorkspace, null).execute(); //here response gets its value
return response.getText().get(0);
}
@POST
@Produces("application/text")
@Consumes("application/text")
public String getBotAnswer(String userText){
System.out.println("response " + response);
request = new MessageRequest.Builder().inputText(userText).context(response.getContext()).build(); //response must not be null
response = service.message(conversationWorkspace, request).execute();
return response.getText().get(0);
}
}
所讨论的Java类似乎不是容器管理的Bean。当您对GET和随后的Post方法进行休息服务调用时,会创建两个单独的实例。因此,在第二个帖子通话中,类字段响应将无效。
有多种方法可以解决此问题。但是,采取的方法取决于回答以下问题:该服务是否真的知道两个单独的客户请求?或者,客户应该拨打电话,然后向后续帖子提供所需的信息。
我将使用下面指出的方法1,除非有充分的理由使用2、3或4。(2、3和4相似,只是它们是不同的规格/框架(
- 客户缓存GET的响应,并通过邮政请求发送所需的信息
- 使用EE状态会话bean(http://docs.oracle.com/javaee/6/tutorial/doc/gipjg.html(
- 使用CDI会话范围(http://docs.oracle.com/javaee/6/tutorial/doc/gjbbk.html(
- 使用春季会话(http://springinpractice.com/2008/05/08/session-scoped-beans-beans-in-spring/https://tuhrig.de/making-making-abaking-aaking-a-spring-bean-bean-bean-bean-bean-bean-bean-bean-bean-bean sissionsession-scoped/(