温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Spring Boot项目@RestController如何使用重定向redirect

发布时间:2021-09-02 13:50:53 阅读:1322 作者:小新 栏目:开发技术
开发者测试专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

这篇文章主要介绍Spring Boot项目@RestController如何使用重定向redirect,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

Spring Boot @RestController重定向redirect

Spring MVC项目中页面重定向一般使用return "redirect:/other/controller/";即可。而Spring Boot使用了@RestController注解,上述写法只能返回字符串

解决方法如下

将一个HttpServletResponse参数添加到处理程序方法然后调用response.sendRedirect("some-url");

@RestController
public class FooController {
  @RequestMapping("/foo")
  void handleFoo(HttpServletResponse response) throws IOException {
    response.sendRedirect("some-url");
  }
}

@RestController 注释下的重定向探讨

背景

在工作中遇到需要@RestController 内部的方法直接进行重定向或者转发

我们知道@RestController注解后,方法默认返回json。但是如果返回ModelAndView 则依然按ModelAndView曾经的逻辑走

那么springmvc内部的逻辑是如何走的呢?

HandlerMethodReturnValueHandlerComposite#selectHandler()
HandlerMethodReturnValueHandlerComposite#handleReturnValue() 
ServletInvocableHandlerMethod#invokeAndHandle()
RequestMappingHandlerAdapter#invokeHandlerMethod()
RequestMappingHandlerAdapter#handleInternal() 
AbstractHandlerMethodAdapter#handle() 
DispatcherServlet#doDispatch()
DispatcherServlet#doService()

自下向上调用,最终通过依据返回参数和MethodParameter(方法参数的简述类) 得到使用何种HandlerMethodReturnValueHandler,当我们加上@RestController 如果方法返回ModelAndView 或者 View自然返回ModelAndViewMethodReturnValueHandler去处理,因此就解决了需要在@RestController注解下转发或重定向的问题。

下面是springmvc 默认的15种HandlerMethodReturnValueHandler

0 = {ModelAndViewMethodReturnValueHandler@71211 = {ModelMethodProcessor@83722 = {ViewMethodReturnValueHandler@83733 = {ResponseBodyEmitterReturnValueHandler@83744 = {StreamingResponseBodyReturnValueHandler@71255 = {HttpEntityMethodProcessor@83756 = {HttpHeadersReturnValueHandler@83767 = {CallableMethodReturnValueHandler@83778 = {DeferredResultMethodReturnValueHandler@83789 = {AsyncTaskMethodReturnValueHandler@837910 = {ModelAttributeMethodProcessor@838011 = {RequestResponseBodyMethodProcessor@713212 = {ViewNameMethodReturnValueHandler@838113 = {MapMethodProcessor@838214 = {ModelAttributeMethodProcessor@8383}

以上是“Spring Boot项目@RestController如何使用重定向redirect”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!

亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI

开发者交流群×