gpt4 book ai didi

java - Spring 3.2 mvc,如何在 Controller 内重写 url 作为 redirectview 的一部分,并发送永久状态代码

转载 作者:行者123 更新时间:2023-11-30 07:20:21 25 4
gpt4 key购买 nike

 @RequestMapping(value = "/Foo/{id}/{friendlyUrl:.*}", method = RequestMethod.GET)
public ModelAndView getFoo(@PathVariable final Long id, @PathVariable final String friendlyUrl) {

因此它匹配 ID 和任何字符串。但我希望用户看到我指定的字符串。

foo = fooService.get(id); //use id from pathvariable
redirectView = new RedirectView(foo.getCorrectUrl()); //set url to correct url, not that in path
redirectView.setStatusCode(HttpStatus.MOVED_PERMANENTLY); //moved permanently
modelAndView = new ModelAndView(redirectView);
modelAndView.setViewName("myFoo.jsp");
return modelAndView;

一切正常,除了用户看到的 url 不正确。

它(应该是)与更改 stackoverflow 网站上现有问题的问题标题时的功能相同。

编辑,现在做下面几乎可行的事情

  return new ModelAndView("redirect:/Foo/"+id+"/"+foo.getUrl());

但这会返回一个临时移动的状态代码,我想要永久 301。

他们是使用 spring-mvc Controller 获取重写 url 和永久移动状态代码的方法吗?

最佳答案

在你的代码中你有

foo = fooService.get(id); //use id from pathvariable
redirectView = new RedirectView(foo.getCorrectUrl()); //set url to correct url, not that in path
redirectView.setStatusCode(HttpStatus.MOVED_PERMANENTLY); //moved permanently
modelAndView = new ModelAndView(redirectView);
modelAndView.setViewName("myFoo.jsp");
return modelAndView;

modelAndView.setViewName("myFoo.jsp"); 的调用有效地替换了传递给 ModelAndView 构造函数的 View(redirectView 引用)的值。所以在这种情况下你不应该调用 setViewName。

关于java - Spring 3.2 mvc,如何在 Controller 内重写 url 作为 redirectview 的一部分,并发送永久状态代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14089885/

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