gpt4 book ai didi

java - 在没有 ModelAndView 的 Spring MVC 4 中以 301 状态重定向

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:50:34 26 4
gpt4 key购买 nike

我尝试使用 301 状态代码 进行重定向(你知道我想对 SEO 友好等)。

我确实使用了 InternalResourceViewResolver,所以我想在我的 Controller 中使用类似于 return "redirect:http://google.com" 的某种代码。这虽然会发送一个 302 状态代码

我试过的是使用HttpServletResponse 来设置header

@RequestMapping(value="/url/{seo}", method = RequestMethod.GET)
public String detail(@PathVariable String seo, HttpServletResponse response){
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
return "redirect:http://google.com";
}

它仍然返回 302

在检查文档和谷歌结果后,我得出以下结论:

@RequestMapping(value="/url/{seo}", method = RequestMethod.GET)
public ModelAndView detail(@PathVariable String seo){
RedirectView rv = new RedirectView();
rv.setStatusCode(HttpStatus.MOVED_PERMANENTLY);
rv.setUrl("http://google.com");
ModelAndView mv = new ModelAndView(rv);
return mv;
}

它确实工作得很好,正如预期的那样,返回代码 301

我想在不使用 ModelAndView 的情况下实现它(也许它非常好)。可能吗?

注意:包含的片段只是详细信息 Controller 的一部分,重定向只在某些情况下发生(支持旧版 url)。

最佳答案

我建议像您一样使用 spring 的 redirectView。您必须有一个完整的 URL,包括域等才能正常工作,否则它会执行 302。或者如果您有权访问 HttpServletResponse,那么您可以执行以下操作。

public void send301Redirect(HttpServletResponse response, String newUrl) {
response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
response.setHeader("Location", newUrl);
response.setHeader("Connection", "close");
}

关于java - 在没有 ModelAndView 的 Spring MVC 4 中以 301 状态重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28726036/

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