gpt4 book ai didi

java - 请求 header 在 spring mvc 中变得为空

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:37:33 25 4
gpt4 key购买 nike

我的 Controller 中有两种映射方法。一个正在重定向到另一个。 在重定向之前,我设置了一个标题作为响应。但是我得到的请求 header 为空。 这些是我在 Controller 中的方法。两者都在同一个 Controller 中。

@RequestMapping(value="/testStart", method=RequestMethod.POST)
public String testStart(HttpServletRequest request, HttpServletResponse response){
String token = "126712810-1289291":

response.addHeader("authToken", token);

return "redirect:/test";
}
@RequestMapping(value="/test", method={ RequestMethod.POST, RequestMethod.GET })
public String getTestPage(Model model, HttpServletRequest request, HttpServletResponse response){

String token = request.getHeader("authToken");
System.out.println(token); //prints null
model.addAttribute("Testtoken", token);
System.out.println("Test page about to load ..");
return "test";

}

我正在使用 postman 客户端来测试这个 api。它正在点击 url 并重定向到其他 url。但标题为空。我不知道出了什么问题。谁能帮我解决这个问题?谢谢

最佳答案

使用 Redirect 方法,Web 应用程序告诉浏览器加载您要重定向的页面。所以这会从浏览器发出新的 http 请求,此时原始请求无法访问。

所以你的问题可以用Forward方法解决。 Web 应用在内部将所有请求数据转发到另一个处理程序方法

return "forward:/test";

此外,请更改您的

String token = request.getHeader("authToken");

String token = response.getHeader("authToken");

因为您正在将 authToken 添加到响应对象。(来自评论 HttpServletResponse -> getHeader(String name) 自 Servlet 3.0 起有效)

编辑:

此代码将是您完整的解决方案 "/test" 方法支持转发请求,也支持来自浏览器的请求。(您想从请求中获取 token 信息,因为您想在不转发的情况下调用/test 方法,所以它以这种方式工作,但是在转发时您无法添加 header ,因此您尝试在响应中添加并从请求中获取它,但这不起作用以这种方式,所以你需要根据调度程序的类型解析 token ,所以检查代码)

@RequestMapping(value="/testStart", method=RequestMethod.POST)
public String testStart(HttpServletRequest request, HttpServletResponse response){
String token = "126712810-1289291";

request.setAttribute("authToken", token);

return "forward:/test";
}

@RequestMapping(value="/test", method={ RequestMethod.POST, RequestMethod.GET })
public String getTestPage(Model model, HttpServletRequest request, HttpServletResponse response)
{

//-----------------
//resolving token
String token = null;
DispatcherType type = request.getDispatcherType();

if(type == DispatcherType.FORWARD)
{
token = (String) request.getAttribute("authToken");
}
else if(type == DispatcherType.REQUEST)
{
token = (String) request.getHeader("authToken");
}
//-----------------

System.out.println(token); //prints the value
model.addAttribute("Testtoken", token);
System.out.println("Test page about to load ..");
return "test";
}

关于java - 请求 header 在 spring mvc 中变得为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39222045/

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