Spring Boot项目@RestController使用重定向redirect方式

网友投稿 1367 2022-12-12

Spring Boot项目@RestController使用重定向redirect方式

Spring Boot项目@RestController使用重定向redirect方式

目录Spring Boot @RestController重定向redirect解决方法如下@RestController 注释下的重定向探讨背景那么springmvc内部的逻辑是如何走的呢?下面是springmvc 默认的15种HandlerMethodReturnValueHandler

Spring Boot @RestController重定向redirect

Spring MVC项目中页面重定向一般使用return "redirect:/other/chttp://ontroller/";即可。而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@7121}

1 = {ModelMethodProcessor@8372}

2 = {ViewMethodReturnValueHandler@8373}

3 = {ResponseBodyEmitterReturnValueHandler@8374}

4 = {StreamingResponseBodyReturnValueHandler@7125}

5 = {HttpEntityMethodProcessor@8375}

6 = {HttpHeadersReturnValueHandler@8376}

7 = {CallableMethodReturnValueHandler@8377}

8 = {DeferredResultMethodReturnValueHandler@8378}

9 = {AsyncTaskMethodReturnValueHandler@8379}

10 = {ModelAttributeMethodProcessor@8380}

11 = {RequestResponseBodyMethodProcessor@7132}

12 = {ViewNameMethodReturnValueHandler@8381}

13 = {MapMethodProcessor@8382}

14 = {ModelAttributeMethodProcessor@8383}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:分析程序常用的方法有(分析程序常用的方法有函证吗)
下一篇:电脑小程序打不开的原因(电脑小程序打不开什么原因,怎么办?)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~