好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

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

Spring Boot @RestController重定向redirect

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

解决方法如下

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

?

1

2

3

4

5

6

7

@RestController

public class FooController {

   @RequestMapping ( "/foo" )

   void handleFoo(HttpServletResponse response) throws IOException {

     response.sendRedirect( "some-url" );

   }

}

@RestController 注释下的重定向探讨

背景

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

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

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

?

1

2

3

4

5

6

7

8

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

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

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 }

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。

原文链接:https://HdhCmsTestcnblogs测试数据/EasonJim/p/7459486.html

查看更多关于Spring Boot项目@RestController使用重定向redirect方式的详细内容...

  阅读:22次