gpt4 book ai didi

java - .forward(req, resp) 之后的 HttpServletRequest 有什么问题?

转载 作者:行者123 更新时间:2023-12-02 02:45:18 26 4
gpt4 key购买 nike

我有一个简单的 Servlet 测试,它获取 jsp 文件。在此 servlet 操作中 request.setAttribute("key", "value") 但在调用 .forward() 之后,当我执行 request.getAttribute("key"时) 我得到null。为什么会发生这种情况?此行为决定模拟对象中的forward或原因?

这是Servlet的doPost:

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {

final boolean success = addUserInDatabase(req);

if (success) req.setAttribute("serverAnswer", EDIT_SUCCESS.get());//this write value
else req.setAttribute("serverAnswer", ERR_UNIQUE_L_P.get());

req.getRequestDispatcher(ANSWER.get())
.forward(req, resp);
}

这是测试:

//mock http.
HttpServletRequest request = mock(HttpServletRequest.class);
HttpServletResponse response = mock(HttpServletResponse.class);


RequestDispatcher dispatcher = mock(RequestDispatcher.class);
when(request.getRequestDispatcher(ANSWER.get()))
.thenReturn(dispatcher);
servlet.doPost(request, response);
String result = (String) request.getAttribute("serverAnswer");//get value
Assert.assertThat(result, is(EDIT_SUCCESS.get()));// result == null

为什么我得到 Null?调用forward后是否可以获取setAttribute的值?如何测试这种行为?谢谢。

最佳答案

如果您在调用 req.getRequestDispatcher(ANSWER.get()) 之前添加 String result = (String)req.getAttribute("serverAnswer"); servlet 并检查 result 的值,它仍然为 null。

原因是您的请求对象不是真实的而是模拟的。你必须做这样的事情。

when(request.getAttribute(eq("serverAnswer"))).thenReturn(EDIT_SUCCESS.get());

关于java - .forward(req, resp) 之后的 HttpServletRequest 有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44658500/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com